在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一个字符。
正如我在我的回答开始时所说的,这首先是不可取的,正如这里的答案所表明的那样,实现起来并不那么容易。考虑到涉及难度和这一事实,我不认为这是值得的麻烦,它不会导致最佳的用户体验。
答
在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;
}
没有用这种方法有点问题的内容。请搂我的回答。 – taskinoor 2011-01-30 17:10:05
只有你也打算也使用`clearsOnBeginEditing`。 – Alex 2011-01-30 19:15:18