我想在 UITextField 变空时执行某个操作(用户一个接一个地删除所有内容或使用清除选项)。

我想过用两种方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

- (BOOL)textFieldShouldClear:(UITextField *)textField;

UITextFieldDelegate

我不确定如何检测文本字段变空时的情况? 我试过:

if ([textField.text length] == 0)

但它不起作用,因为在从文本字段中删除符号之前调用了上述方法的第一个。

有任何想法吗?

#1楼 票数:38 已采纳

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSRange textFieldRange = NSMakeRange(0, [textField.text length]);
    if (NSEqualRanges(range, textFieldRange) && [string length] == 0) {
        // Game on: when you return YES from this, your field will be empty
    }
    return YES;
}

需要注意的是,该字段直到此方法返回后才会为空,因此您可能希望在此处设置一些中间状态,然后使用textFieldDidEndEditing:来了解用户已完成清空该字段。

#2楼 票数:5

如果有人正在搜索此代码的 Swift 4.2 版本,则如下所示。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let textFieldRange = NSRange(location: 0, length: textField.text?.count ?? 0)
    if NSEqualRanges(range, textFieldRange) && string.count == 0 {
        // Do whatever you want when text field is empty.
    }
    return true
}

#3楼 票数:0

以下代码也有效。

-(void)textfieldDidChange:(UITextField *)textField

{

if (textField == first)
{

    [second becomeFirstResponder];

}
else if(textField == second)
{
    if (textField.text.length == 0)
    {
        [first becomeFirstResponder];
    }
    else
    {
        [third becomeFirstResponder];
    }

}
else if(textField == third)
{
    if (textField.text.length == 0)
    {
        [second becomeFirstResponder];
    }
    else
    {
         [four becomeFirstResponder];
    }

}

else if(textField == four)
{
    if (textField.text.length == 0)
    {
        [third becomeFirstResponder];
    }
    else
    {
        [four becomeFirstResponder];
    }

}
}

为每个文本字段添加了目标。 对我来说,当当前文本字段中的文本为空时,我必须将光标放在前一个字段中。 如果您需要任何澄清,请告诉我。

#4楼 票数:0

这是不使用 NSRange 的解决方案

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    if(textField.text.length==1 && string.length==0){
        //textfield is empty
    }else{
        //textfield is not empty
    }

    return true;
}

  ask by Jakub translate from so

未解决问题?本站智能推荐:

1回复

如何检测uitextfield长度

我试图获取uitextfield是否为空,以及是否要在ibaction中运行以下代码。 其中v.text是uitextfield中的文本
1回复

UITextField点击检测

关于在文本字段上进行轻按事件,我一直遇到问题。 我已经尝试了几乎所有东西。 几乎。 从包括文本字段委托到调用它,再到将文本字段变成一个动作,一直到添加UIGestureRecognizers以及在函数形式中使用made选择器。 我的文本字段也位于另一个快速文件中,因为它位于自定义单元
4回复

检测UITextField的焦点更改

我正在尝试设置动画,以便在隐藏和显示文本字段的键盘时向上移动视图,并使它工作得很好,但是当焦点从一个文本字段移到另一个文本字段时,它不起作用因为已经显示了键盘。 在viewDidLoad中,我注册了以下内容: 然后在keyboardWillShow和keyboardWillHide
4回复

检测UITextField失去焦点

我搜索了很多谷歌搜索和heree,但没有任何用处。 我有两个文本域,我无法识别哪一个失去了焦点。 我尝试了所有选项,但没有。 这里是textFieldDidEndEditing : 所有NSLog都返回0! 为什么?!? 我如何检测丢失的焦点? 每次按下键盘按钮
2回复

如何检测UITextField是否是@me地址?

我正在构建一个邮件客户端,并想知道如何检测文本字段是否包含@me。 最好使用if语句。 谢谢!
5回复

如何检测UISearchBar / UITextField的输入暂停?

我有以下UISearchbar代码: 我希望在输入暂停后发送此请求,并在每次命中一个字符时重置计时器。 我怎样才能做到这一点?
1回复

在iOS的UITextField中检测回车

如何在iOS中检测UITextView的回车? 我目前只是在这个领域呆了一段时间,但想对此做些改进: 所以我想在找到返回值之后调用一个函数,目前我在1秒钟后调用checkText。
28回复

在空的 UITextField 中检测退格

有什么方法可以检测何时在空的UITextField上的 iPhone 键盘中按下Backspace / Delete键? 我想知道只有当UITextField为空时才按下Backspace 。 根据@Alex Reynolds 在评论中的建议,我在创建文本字段时添加了以下代码: 收到此通知(