如何禁用键盘出现时击中文本字段,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 } }