完成编辑后如何检查UITextField文本是否为空

时间:2012-04-25 01:20:24

标签: iphone objective-c ios cocoa-touch uitextfield

我目前有一个带有默认文本的UITextField,并在编辑开始时设置为清除。我正在努力使它如果字段为空或编辑完成时为零,则文本值将再次成为默认文本。我无法检测编辑完成或键盘被解除的时间。谁能告诉我我想要使用哪种检测方法以及如何实现它?非常感谢!


修改


在我的情况下不能使用placeholder

6 个答案:

答案 0 :(得分:13)

你必须使用textfield delegate

-(void)textFieldDidEndEditing:(UITextField *)textField;

在这个委托中进行像这样的检查

if ( [textField.text length] == 0 )
{
    // the text field is empty do your work
} else {
    ///  the text field is not empty 
}

答案 1 :(得分:8)

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
    if (range.location == 0 && string.length == 0)
    {
        //textField is empty
    }
    return YES;
}

答案 2 :(得分:4)

我认为您不需要自己处理“默认文本”。检查UITextField类的placeholder属性。

<强>更新

所以placeholder对你的情况不利。您是否尝试为UITextField实施UITextFieldDelegate方法并更改textViewDidEndEditing:中的文字?

为此,请在视图控制器中实现对您的方案有用的UITextFieldDelegate方法,并将delegate的{​​{1}}设置为视图控制器(通过Interface Builder或以编程方式) )。在UITextField方法中设置默认文本。

您可以参考Text, Web, and Editing Programming Guide for iOS的“获取输入文字和设置文字”部分。

答案 3 :(得分:2)

当您收到文本字段返回时的委托调用时,请使用sender参数检查文本(sender.text),如果它等于@""则设置默认值文本。

答案 4 :(得分:1)

您还需要检查是否删除的范围是文本的整个长度。

func textField(_ textField: UITextField, shouldChangeCharactersIn range:  NSRange, replacementString string: String) -> Bool {
    if !(range.location == 0 && string.count == 0 && range.length == textField.text?.count) {
      // Text field is empty
    }
    return true
}

答案 5 :(得分:1)

我使用2种方法。我的选择取决于应用程序的业务逻辑。

1)在shouldChangeCharactersIn中应用更改后,我检查了结果文本:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        var text = textField.text ?? ""

        let startIndex = text.index(text.startIndex, offsetBy: range.location)
        let endIndex = text.index(text.startIndex, offsetBy: range.location + range.length)
        text = text.replacingCharacters(in: startIndex..<endIndex, with: string)
        if text.count == 0 {
            // textField is empty
        } else {
            // textField is not empty
        }
        return true
    }

2)我使用editingChanged动作:

@IBAction private func textFieldDidChange(_ sender: UITextField) {
        if (sender.text?.count ?? 0) == 0 {
            // textField is empty
        } else {
            // textField is not empty
        }
    }