13

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

选择器显示正常,但问题是键盘出现在底部,我不希望这样。

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

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

编辑


为了将来参考这里实际发生的事情,实际上两次(iphone和ipad)键盘都没有隐藏。我只是认为它隐藏在 iphone 中,因为从底部弹出的选择器隐藏了键盘,因为它在它的顶部。但在 ipad 上,情况并非如此。

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

注意,我接受了这个答案,因为它是专门回答我想要的答案的。其余的答案是正确的,我认为其他实现更好。

4

8 回答 8

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

当您点击文本字段时,此委托方法将首先被调用,如果您将 NO 写为布尔值,则意味着您不想开始编辑,因此它不会显示键盘。

于 2013-02-28T14:20:15.150 回答
8
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if(textfield == yourtextField)
    {
        [textfield resignFirstResponder];
        // Show you custom picker here....
        return NO;
    }     
}

你需要uitextfielddelegate在控制器中实现。

并将委托分配给yourtextField.

于 2013-02-28T12:48:12.113 回答
6

使用文本字段委托。

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{        
    return NO;
}
于 2014-08-04T05:52:54.103 回答
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 也可以更干净地做到这一点。

于 2016-02-18T04:02:47.273 回答
1

使用 textField 委托,

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
 textField=nil;
 return NO;
}
于 2013-02-28T12:45:13.743 回答
1

迅捷3.0版

首先为文本字段设置委托

self.textfield.delegate = self

然后在扩展中

extension ViewController: UITextFieldDelegate {
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        return false
    }
}
于 2017-07-07T15:53:01.197 回答
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;
    }
}
于 2014-07-24T09:31:20.107 回答
0

斯威夫特 3/4

  1. 在您的班级中添加:- UITextFieldDelegate 。

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

  3. 最后一个只是添加这个功能 -

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        return false
    }
    
于 2018-08-02T08:14:06.257 回答