我有一个包含UITextField的UIAlertView。警报视图有两个按钮。一个正常的“解雇”按钮和另一个“添加”按钮。如果UITextField不为空,则“添加”按钮应该是可单击的。如果字段为空,我不知道如何“实时”登记。如果单击按钮,我只看到检查textField的可能性。但这不是想要的(如果thextField为空,“添加”按钮应该变灰)。你有解决方案吗?谢谢你的努力!
我正在使用Swift 3和Xcode 8
答案 0 :(得分:3)
您需要将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
}
这是一个工作示例
答案 1 :(得分:0)
检查文本字段文本:
if textField.text != nil && textField.text != "" {
print("you can enable your add button")
}else{
print("empty text field")
}
答案 2 :(得分:0)
你可以使用TextFieldDelegate。将当前视图Controller或视图设置为delegate.like
let textTextField = UITextField()
textTextField.delegate = self
当文本字段改变时,将调用以下方法。
func textField(_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool
或者您可以使用通知 UITextFieldTextDidChange .it将在文本字段文本发生更改时发布。
受影响的文本字段存储在通知的对象参数中。