当按下UITextField
的清除按钮时,有没有办法隐藏键盘?
答案 0 :(得分:41)
是的,虽然我怀疑这样做会违反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中有一个字符时,您无法轻易区分清除按钮和点击删除按钮。
正如我在答案的开头所说的那样,这首先是不可取的,正如这里的答案所示,实施起来并不容易。考虑到和所带来的困难,我认为这不值得麻烦,因为它不会带来最佳的用户体验。
答案 1 :(得分:9)
这段代码绝对有助于我在清除文本字段的内容时隐藏键盘
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
textField.text = @"";
return NO;
}
答案 2 :(得分:2)
是的。在代理人的resignFirstResponder
方法中的文本字段上调用textFieldShouldClear:
。
答案 3 :(得分:1)
在UITextFieldDelegate
中- (BOOL)textFieldShouldClear:(UITextField *)textField { [textField resignFirstResponder]; return YES; }
但这有一个问题。从手册中,“文本字段调用此方法以响应用户按下内置清除按钮。(默认情况下不显示此按钮,但可以通过更改文本字段的clearButtonMode属性中的值来启用此按钮。)编辑开始时也调用此方法,并将文本字段的clearsOnBeginEditing属性设置为YES。“
请注意,如果clearsOnBeginEditing设置为YES,则在编辑开始时调用此方法。因此,如果您在此方法中调用resignFirstResponder,则编辑将不会实际开始。所以你需要将clearsOnBeginEditing设置为NO。显然,编辑开始时不会清除文本字段。
另一个与问题没有直接关系的重要事项。点击清除按钮后隐藏键盘不是一种熟悉的行为,Apple不喜欢改变标准项目的行为。你可能会因此拒绝。
答案 4 :(得分:0)
试试这段代码:
[TextField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1];