如果 UITextField 不为空,请实时检查

Posted

技术标签:

【中文标题】如果 UITextField 不为空,请实时检查【英文标题】:Check live if UITextField is not empty 【发布时间】:2016-11-24 16:10:46 【问题描述】:

我有一个包含 UITextField 的 UIAlertView。警报视图有两个按钮。一个正常的“关闭”按钮和另一个“添加”按钮。如果 UITextField 不为空,则“添加”按钮应该只是可点击的。如果该字段为空,我不知道如何“实时”签入。如果单击了按钮,我只看到了检查 textField 的可能性。但这不是我们想要的(如果 xtField 为空,“添加”按钮应该是灰色的)。您对此有解决方案吗?感谢您的努力!

我正在使用 Swift 3 和 Xcode 8

【问题讨论】:

你会想要使用 UITextFieldDelegate 来监听变化。 UIAlertView 不久前已被弃用。你应该使用UIAlertController 【参考方案1】:

您需要像这样将 UIAlertAction 创建为全局变量

var alertAction = UIAlertAction()

现在在向 UIAlertController 添加该操作时,您需要将属性 isEnabled 设置为 false,如下面的代码所示

alertAction = UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil)
alertAction.isEnabled = false
let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addTextField  (textField) in
    textField.delegate = self
        
alert.addAction(alertAction)
self.present(alert, animated: true, completion: nil)

在委托方法 shouldChangeCharacter 之后,您需要获取是否在 UITextField 中输入了值,然后您需要像这样启用该按钮

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
        let userEnteredString = textField.text
        let newString = (userEnteredString! as NSString).replacingCharacters(in: range, with: string) as NSString
        if  newString != ""
            alertAction.isEnabled = true
         else 
            alertAction.isEnabled = false
        
        return true
    

这是一个工作示例

【讨论】:

你知道怎么做才能使它成为一个实用程序类,这样你就不必在你想使用它的每个视图控制器中实现委托模式了吗?我有一些问题 (***.com/questions/40837477/…)【参考方案2】:

您可以使用 TextFieldDelegate。将您当前的视图控制器或视图设置为委托。类似

let textTextField = UITextField()
textTextField.delegate = self

当文本字段发生变化时,将调用以下方法。

func textField(_ textField: UITextField, 
shouldChangeCharactersIn range: NSRange, 
      replacementString string: String) -> Bool

或者您可以使用通知 UITextFieldTextDidChange 。它会在文本字段的文本发生更改时发布。

受影响的文本字段存储在通知的对象参数中。

【讨论】:

【参考方案3】:

检查文本字段文本:

if textField.text != nil && textField.text != "" 
    print("you can enable your add button")
else
    print("empty text field")

【讨论】:

questing 不是在问这样的问题,是的,可以检查 textField 是否为空。

以上是关于如果 UITextField 不为空,请实时检查的主要内容,如果未能解决你的问题,请参考以下文章

如果不为空,检查查询字符串参数值的最优雅方法是啥?

如果字段不为空,则添加对验证器的检查

检查返回值是不是不为空,如果是,则在一行中使用一个方法调用将其分配

如何检查三个变量中是不是只有一个不为空?

Selenium Python 检查变量值是不是不为空。我得到 False 但有一个价值

如何检查 LocationServices.FusedLocationApi.getLastLocation() 何时不为空?