如何在iOS中禁用文本字段上弹出键盘的功能?

13

我有一个文本框,当用户按下它时,需要显示一个自定义选择器。

选择器可以正常显示,但问题是键盘出现在底部,我不想要这个。

这是一个iPad项目,我正在尝试从我的iPhone项目转换过来。 在iPhone上,这很好用,并且键盘始终被隐藏。

我可能漏掉或忘记做什么了?

编辑


"为了以后参考,实际上发生的情况是,在 iPhone 和 iPad 上,键盘都没有隐藏。我只是认为它在 iPhone 上被隐藏了,因为我的选择器从底部弹出时会将键盘隐藏,因为它在其上方。但在 iPad 上不是这种情况。无论如何,我使用下面建议的委托方法修复了它。请注意,我接受了这个答案,因为它是回答我想要的具体问题的答案。其他答案是正确的,对于其他实现可能更好。"

1
即使将选择器设置为textField的InputAccessoryView,键盘是否仍然显示? - Vin
你可以发布你的代码吗? - Ravindhiran
8个回答

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

当您点击文本框时,此委托方法将首先被调用。如果您将布尔值设置为NO,则表示您不想开始编辑,因此键盘不会显示。


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

您需要在控制器中实现 uitextfielddelegate

然后将委托分配给 yourtextField


6

使用textfield代理。

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

3

看起来所有这些答案都采取了同一种方式,即在键盘弹出之前简单地拒绝它。这可以防止第一个响应者状态,这有许多优点。

一个简单的方法是创建一个空视图,并将其分配给输入字段的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,也可以更加简洁地完成这项工作。


1

Swift 3.0版本

首先为文本框设置代理。

self.textfield.delegate = self

然后在扩展中。
extension ViewController: UITextFieldDelegate {
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        return false
    }
}

1
使用textField代理。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
 textField=nil;
 return NO;
}

1
为什么你应该将 textField 设置为 nil? - Chen Li Yong

0

Swift 3/4

  1. 在你的类中添加:UITextFieldDelegate

  2. 在ViewDidLoad中添加:self.textField.delegate = self

  3. 最后添加这个函数:

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

0
-(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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接