iPhone:可以用UITextField清除按钮关闭键盘吗?

Dan*_*Dan 12 iphone uitextfield

我想知道是否有办法让UITextField清除按钮'始终可见'

textfield.clearButtonMode = UITextFieldViewModeAlways;
Run Code Online (Sandbox Code Playgroud)

似乎不起作用..如果可以使用按钮关闭键盘?

提前致谢.

小智 37

就像之前提到的那样,在您清除该字段之后,苹果似乎正在设置文本域焦点.

解决方案非常简单.只需自己清除字段,resignFirstResponder并返回NO

    -(BOOL)textFieldShouldClear:(UITextField *)textField
    {
        textField.text = @"";
        [textField resignFirstResponder];

        return NO;
    }
Run Code Online (Sandbox Code Playgroud)


mvd*_*vds 9

在你的委托中,功能

- (BOOL)textFieldShouldClear:(UITextField *)textField
Run Code Online (Sandbox Code Playgroud)

当用户想要清除文本字段时调用.如果您返回YES并致电

[textField resignFirstResponder];
Run Code Online (Sandbox Code Playgroud)

键盘应该消失.我不知道clearButtonMode,除了你可能想要提前设置它,最好是在将视图添加到其superview之前.

编辑为确保您真正辞职了响应者,请稍后尝试:

[textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1];
Run Code Online (Sandbox Code Playgroud)


小智 5

延迟对我来说效果不佳.相反,我向委托添加了一个实例变量:

BOOL cancelEdit;
Run Code Online (Sandbox Code Playgroud)

然后在委托实现中:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if (cancelEdit) {
        cancelEdit = NO;

        return NO;
    } else {
        return YES;
    }
}

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
    cancelEdit = YES;

    return YES;
}
Run Code Online (Sandbox Code Playgroud)