UITextField 键盘没有消失

Posted

技术标签:

【中文标题】UITextField 键盘没有消失【英文标题】:UITextField Keyboard not disappearing 【发布时间】:2014-02-19 00:07:51 【问题描述】:

我目前正在为 ios 7 编写应用程序,但最近遇到了一个有趣的错误。在我的一个 UIViews 中,我有 3 个普通的 UITextFields 和另外两个在编辑开始时 resignFirstResponder 的 UITextFields。它们显示了一个 UIDatePicker 和 UIPickerView 以及一个 UIToolbar。我遇到的错误是,当我在前 3 个文本字段之一中键入内容时,继续单击结束编辑的文本字段而不单击 UIControl(称为 backgroundTapped :),键盘不会消失。我添加了一个日志以查看文本字段是否正在使用“canResignFirstResponder”退出 firstResponder 状态,并且它返回“1”,但即使在更改视图时键盘也不会消失,直到我单击前 3 个文本之一字段并单击背景。

这是我的 textFieldDidBeginEditing: 和我的 showRunTypePicker: 方法的开始:

textFieldDidBeginEditing:

- (void)textFieldDidBeginEditing:(UITextField *)textField

    [textField becomeFirstResponder];

    if (textField.tag == 3005) 
        //[textField resignFirstResponder];
        //[self.view endEditing:YES];

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.25];

        [self showRunTypePicker:self];

        [UIView commitAnimations];
    

showRunTypePicker:

- (IBAction)showRunTypePicker:(id)sender
    
        BOOL canResign = [runTypeField canResignFirstResponder];
        NSLog(@"canResign: %hhd", canResign);

        [runTypeField endEditing:YES];
        [runTypeField resignFirstResponder];

        [[self view] endEditing:YES];
        [pickerView endEditing:YES];
        [pickerView setHidden:YES];
        [toolbar setHidden:YES];

        [distanceField endEditing:YES];

        ...
    

我似乎无法弄清楚问题所在。谁能帮我解决这个问题?

编辑:它现在正在工作。我将 [self showRunTypePicker:self] 设置为 [self showRunTypePicker:textField] 并将其移至 textFieldShouldBeginEditing。现在键盘正确地消失了。

【问题讨论】:

你有。代码中的错误。 【参考方案1】:

您的代码中有错误。

阅读这一行

[self showRunTypePicker:self];

你不认为它实际上应该是:

[self showRunTypePicker:textField];

您的意图是在您选择特定文本字段时退出键盘。 所以你实际上应该通过

textField

标签为3005的实例。

尝试将 sender 用作 UITextField 并执行布尔检查。

希望对您有所帮助。

【讨论】:

以上是关于UITextField 键盘没有消失的主要内容,如果未能解决你的问题,请参考以下文章

touchesBegan 不触发

切换uitextf时停止键盘关闭

消失的 iPhone 数字键盘

如何从 UITextField 中移除焦点?

iOS - 在 UITextField 之外触摸时关闭键盘

键盘不会随着 resignFirstResponder 消失