看起来所有这些答案都采用一种方法,在键盘出现之前简单地拒绝它。这可以防止具有许多优点的第一响应者状态。
允许您保持第一响应者状态的一种简单方法是创建一个空视图并将其分配给输入字段上的 inputView 属性。如果您使用的是 iOS 9(或更高版本?),您还必须摆脱 inputAssistantItem 对象。
UITextField *field = [[UITextField alloc] init];
field.inputView = self.emptyKeyboard.view;
UITextInputAssistantItem *aItem = [field inputAssistantItem];
aItem.leadingBarButtonGroups = @[];
aItem.trailingBarButtonGroups = @[];
然后,如果您想从备用视图控制器控制该字段,您可以通过添加目标来实现:
[field addTarget:self.numberPad action:@selector(editingBegan:) forControlEvents:UIControlEventEditingDidBegin];
[field addTarget:self.numberPad action:@selector(editingEnded:) forControlEvents:UIControlEventEditingDidEnd];
[field addTarget:self.numberPad action:@selector(fieldChanged:) forControlEvents:UIControlEventEditingChanged];
通过子类化 UITextField 也可以更干净地做到这一点。