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

时间:2011-01-30 16:23:46

标签: iphone objective-c ios4 uitextfield

当按下UITextField的清除按钮时,有没有办法隐藏键盘?

5 个答案:

答案 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];