在UITextField中按下清除按钮时隐藏键盘

问题描述:

当按下清除按钮UITextField时,有什么方法可以隐藏键盘吗?在UITextField中按下清除按钮时隐藏键盘

是的,虽然我怀疑这样做会违反Apple人机界面指南。

为此,请将以下方法添加到您的视图控制器的实现文件中。然后让视图控制器进入你的文本框的代表。

- (BOOL) textFieldShouldClear:(UITextField *)textField{ 
    [textField resignFirstResponder]; 
    return YES; 
} 

这种方法的缺点是,如果你想防止文本字段清除,你的代码变得混乱。相反,您可以尝试定义自定义方法,然后将其连接到valueDidChange方法并检查一个空值。

-(IBAction)hideKeyboardFromTextField:(id)sender{ 
    //TODO: Check if the previous value was longer than one character to differentiate 
    //between backspace and clear. 

    //check if the editing caused the box to be empty 
    if([[sender value] isEqualToString:@""] || [sender value] == nil) 
    [sender resignFirstResponder]; 
    } 
} 

这里的问题是,你不能轻易的清除按钮的龙头,删除按钮自来水区分时,有在的UITextField一个字符。

正如我在我的回答开始时所说的,这首先是不可取的,正如这里的答案所表明的那样,实现起来并不那么容易。考虑到涉及难度这一事实,我不认为这是值得的麻烦,它不会导致最佳的用户体验。

是的。在代表的textFieldShouldClear:方法的文本字段上调用resignFirstResponder

+0

没有用这种方法有点问题的内容。请搂我的回答。 – taskinoor 2011-01-30 17:10:05

+0

只有你也打算也使用`clearsOnBeginEditing`。 – Alex 2011-01-30 19:15:18

在UITextFieldDelegate

 
- (BOOL)textFieldShouldClear:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 

但是有一个问题与此有关。在手册中,“文本字段响应用户按下内置清除按钮来调用此方法(该按钮默认不显示,但可通过更改文本字段的clearButtonMode属性中的值来启用。编辑开始时也会调用此方法,并且文本字段的clearsOnBeginEditing属性设置为YES。“

请注意,如果clearsOnBeginEditing设置为YES,则在编辑开始时调用此方法。因此,如果您在此方法中调用resignFirstResponder,则编辑将不会实际开始。所以你需要将clearsOnBeginEditing设置为NO。显然,编辑开始时文本字段不会被清除。

另一个重要的问题没有直接关系到这个问题。轻按清除按钮后隐藏键盘不是一种熟悉的行为,Apple不喜欢改变标准项目的行为。您可能会因此遭到拒绝。

试试这个代码:

[TextField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1]; 

此代码是绝对的工作对我来说,隐藏键盘,同时清理出的文本框

- (BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    textField.text = @""; 
    return NO; 
}