シンプルなサインイン画面を構築しています。いくつかの動的フィールドを作成し、ボタンにリスナーを添付しましたが、要素をタップしてユーザー名とパスワードの入力を開始することはできません。 Tabキーを押すと、入力にフォーカスが移りますが、クリックは使用できません。何が間違っているのですか?iOSで動的に作成されたフィールドやボタンはクリックできません
以下のコードとスクリーンショットを参照してください。赤で強調表示されている領域は解除不可能です。アクセシビリティインスペクタがあります。私の要素は決して示されません。
@interface PRLoginController() <UITextFieldDelegate>
@property (nonatomic) UIView *inputView;
@property (nonatomic) UITextField *usernameTextField;
@property (nonatomic) UITextField *passwordTextField;
@property (nonatomic) UIButton *loginButton;
@property (nonatomic) UIButton *cancelButton;
- (void)doLogin;
- (void)doCancel;
- (void)initializeUserInput;
+ (UIViewController *)getTopViewController;
@end
@implementation PRLoginController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.navigationItem.title = @"Login";
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:nil action:nil];
[self initializeUserInput];
}
- (void)initializeUserInput {
UIView *inputView = [[UIView alloc] init];
inputView.translatesAutoresizingMaskIntoConstraints = NO;
CGFloat inputViewMargin = 50.0;
CGFloat inputElementTopMargin = 20.0;
[self.view addSubview:inputView];
[self.view addConstraints:@[
[NSLayoutConstraint constraintWithItem:inputView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0],
[NSLayoutConstraint constraintWithItem:inputView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0],
[NSLayoutConstraint constraintWithItem:inputView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:inputViewMargin],
[NSLayoutConstraint constraintWithItem:inputView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-inputViewMargin]
]];
_inputView = inputView;
CGFloat textFieldHeight = 30.0;
UITextField *topTextField = [[UITextField alloc] init];
topTextField.translatesAutoresizingMaskIntoConstraints = NO;
[inputView addSubview:topTextField];
[inputView addConstraints:@[
[NSLayoutConstraint constraintWithItem:topTextField attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0],
[NSLayoutConstraint constraintWithItem:topTextField attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0],
[NSLayoutConstraint constraintWithItem:topTextField attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:0],
[NSLayoutConstraint constraintWithItem:topTextField attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0 constant:textFieldHeight],
]];
UITextField *bottomTextField = [[UITextField alloc] init];
bottomTextField.translatesAutoresizingMaskIntoConstraints = NO;
[inputView addSubview:bottomTextField];
[inputView addConstraints:@[
[NSLayoutConstraint constraintWithItem:bottomTextField attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:topTextField attribute:NSLayoutAttributeBottom multiplier:1.0 constant:inputElementTopMargin],
[NSLayoutConstraint constraintWithItem:bottomTextField attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0.0],
[NSLayoutConstraint constraintWithItem:bottomTextField attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:0.0],
[NSLayoutConstraint constraintWithItem:bottomTextField attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0 constant:textFieldHeight]
]];
topTextField.borderStyle = UITextBorderStyleRoundedRect;
bottomTextField.borderStyle = UITextBorderStyleRoundedRect;
topTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
bottomTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
topTextField.autocorrectionType = UITextAutocorrectionTypeNo;
bottomTextField.autocorrectionType = UITextAutocorrectionTypeNo;
topTextField.returnKeyType = UIReturnKeyDone;
bottomTextField.returnKeyType = UIReturnKeyDone;
topTextField.delegate = self;
bottomTextField.delegate = self;
topTextField.placeholder = @"Username";
bottomTextField.placeholder = @"Password";
_usernameTextField = topTextField;
_passwordTextField = bottomTextField;
UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom];
leftButton.translatesAutoresizingMaskIntoConstraints = NO;
[inputView addSubview:leftButton];
[inputView addConstraints:@[
[NSLayoutConstraint constraintWithItem:leftButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:150],
[NSLayoutConstraint constraintWithItem:leftButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0.0],
[NSLayoutConstraint constraintWithItem:leftButton attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:-5.0],
]];
UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
rightButton.translatesAutoresizingMaskIntoConstraints = NO;
[inputView addSubview:rightButton];
[inputView addConstraints:@[
[NSLayoutConstraint constraintWithItem:rightButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:150],
[NSLayoutConstraint constraintWithItem:rightButton attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:0.0],
[NSLayoutConstraint constraintWithItem:rightButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:inputView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:5.0],
]];
leftButton.backgroundColor = [UIColor grayColor];
rightButton.backgroundColor = leftButton.backgroundColor;
leftButton.layer.cornerRadius = 4.0;
rightButton.layer.cornerRadius = leftButton.layer.cornerRadius;
[leftButton setTitle:@"Login" forState:UIControlStateNormal];
[rightButton setTitle:@"Cancel" forState:UIControlStateNormal];
[leftButton addTarget:self action:@selector(doLogin) forControlEvents:UIControlEventTouchUpInside];
[rightButton addTarget:self action:@selector(doCancel) forControlEvents:UIControlEventTouchUpInside];
_loginButton = leftButton;
_cancelButton = rightButton;
}
EDIT
私は、ジェスチャ認識を削除したが、それは助けにはなりませんでした。 uiをクリックしても何もしません。私は特にそのハンドラに興味はありません、それは別のビューからコピーされましたが、それを削除することも役に立たなかった。
なぜルートビューにタップジェスチャ認識機能がありますか? – NRitH
@NRitHタップレコグナイザーは、テキストフィールドの外にタップしてキーボードを閉じることが表示されます。 @ caiocpricci2あなたはrecognisersハンドラにログを追加できますか?それはタッチを傍受しており、テキストフィールドへの通過を許可していないと思います。テキストフィールドをタップして、タップ認識ツールのログが有効かどうかを確認します。また、 'inputView'を追加してその制約を2回設定する必要もありません。 –
タップレコグナイザを削除して、テキストフィールドで適切な動作が得られるかどうかを確認してください。もしそうなら、 'UIGestureRecignizerDelegate'を見て適切に解決することができます。 –