【问题标题】:iPhone: Possible to dismiss keyboard with UITextField clear button?iPhone:可以使用 UITextField 清除按钮关闭键盘吗?
【发布时间】:2014-04-08 02:09:17
【问题描述】:

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

textfield.clearButtonMode = UITextFieldViewModeAlways;

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

提前致谢。

【问题讨论】:

    标签: iphone uitextfield


    【解决方案1】:

    如前所述,苹果似乎在您清除字段后设置文本字段焦点。

    解决方案非常简单。自己清场,resignFirstResponder 并返回 NO

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

    【讨论】:

    • 最适合我的解决方案!非常感谢!
    • 如果用户点击清除按钮,我不想显示键盘,但如果显示键盘,我不想隐藏它。我只是从上面的代码中删除了[textField resignFirstResponder];
    【解决方案2】:

    在您的委托中,函数

    - (BOOL)textFieldShouldClear:(UITextField *)textField
    

    在用户想要清除文本字段时调用。如果你返回 YES 并调用

    [textField resignFirstResponder];
    

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

    edit 为确保您确实让响应者辞职,请稍后再尝试:

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

    【讨论】:

    • 谢谢,知道为什么在调用 textFieldShouldClear 时键盘没有消失吗?例如,它适用于 textFieldShouldReturn。
    • 是的,可能是在清除后,UI 还是强制将焦点集中到该字段上。稍后尝试使用我添加到答案中的那一行来辞职。
    • 在 0.1 之后清除它并没有帮助。键盘尝试弹出然后消失,我的所有其他代码都会在键盘弹出时运行。
    • @horseshoe7 我不明白为什么你完全不相关的问题会导致对这个两年前的答案投反对票。
    • 因为您的解决方案不起作用,而且您解决问题的方法也不是很干净。这就是为什么 textFieldShould... 委托方法存在的原因,这样您就可以对它们说不,并防止某些不必要的事情被执行,正如我们在我的实际相关问题中所看到的那样,它可能会产生不希望的副作用。 (没有看帖子的日期,无论如何它仍然相关)。对不起。
    【解决方案3】:

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

    BOOL cancelEdit;
    

    然后在委托实现中:

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
        if (cancelEdit) {
            cancelEdit = NO;
    
            return NO;
        } else {
            return YES;
        }
    }
    
    - (BOOL)textFieldShouldClear:(UITextField *)textField
    {
        cancelEdit = YES;
    
        return YES;
    }
    

    【讨论】:

    • 这是最好的解决方案。
    【解决方案4】:

    UITextFieldDelegate textFieldShouldClear

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

    http://developer.apple.com/iphone/library/documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html#//apple_ref/occ/intfm/UITextFieldDelegate/textFieldShouldClear:

    【讨论】:

      【解决方案5】:

      我发现这种奇怪的行为是由一个竞争的手势识别器引起的,该手势识别器在调用 textFieldShouldClear: 之前退出了键盘之前的第一响应者。它似乎正在破坏第一响应者。

      如果您采用这种方式进行设置,请确保您的手势识别器上的 cancelsTouchesInView 设置为 YES。这样你就不需要在 textFieldShouldClear: 或 textFieldShouldBeginEditing: 委托方法中做任何特殊的事情了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-28
        • 2010-09-24
        • 1970-01-01
        • 2023-04-10
        • 2016-02-12
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        相关资源
        最近更新 更多