如何检测UITextField何时变空

时间:2010-05-08 17:35:16

标签: iphone

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

我考虑过使用两种方法

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

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

来自

UITextFieldDelegate

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

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

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

有什么想法吗?

4 个答案:

答案 0 :(得分:37)

-(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:知道用户已完成清空该字段

答案 1 :(得分: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];
    }

}
}

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

答案 2 :(得分:0)

以下是正在搜索此代码的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)

这是一个不使用 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;
}