如何禁用键盘出现时击中文本字段,iOS?

我有一个文本字段,我需要当用户按下它来显示一个自定义select器。

select器显示正常,但问题是键盘出现在底部,我不想要的。

这是一个iPad项目,我试图从我的iphone转换。 在iPhone上,这个效果很好,键盘总是隐藏的。

我可以错过什么/忘记在这里做?

编辑


为了将来的参考,这里实际发生了什么,实际上这两次(iphone&ipad)的键盘没有隐藏。 我只是以为它隐藏在iphone中,因为我的select器从底部popup,隐藏了键盘,因为它在它的顶部。 但在ipad上,情况并非如此。

无论如何,我使用下面build议的委托方法修复它。

谨慎,我接受这个答案,因为这是一个具体回答我想要的。 其余的答案是正确的,我认为更好的其他实现。

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { // Here You can do additional code or task instead of writing with keyboard return NO; } 

这个删除方法将会在你打到textfield时被调用,如果你把NO作为布尔值写入,意味着你不想开始编辑,所以它不会显示Keyboard。

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { if(textfield == yourtextField) { [textfield resignFirstResponder]; // Show you custom picker here.... return NO; } } 

你需要在控制器中实现uitextfielddelegate

并将该yourtextField分配给yourtextField

使用文本字段委托。

 -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { return NO; } 

使用textField委托,

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { textField=nil; return NO; } 
 -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { // Here you can do for Specific text Field by if (textField==(the text field you don't want to show keyboard)) { NSLog(@"don't show keyboard"); return NO; } else { return YES; } } 

它看起来像所有这些答案采取一种方法,只是否认键盘才出现。 这防止了第一响应者状态,这具有许多优点。

一种简单的方法可以让您保持第一响应者状态,即创build一个空视图并将其分配给input字段上的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]; 

也可以通过inheritanceUITextField来更干净地做到这一点。

迅速3.0版本

首先设置文本字段的委托

 self.textfield.delegate = self 

然后在一个扩展

 extension ViewController: UITextFieldDelegate { func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { return false } }