我添加一个UITextField到一个UIAlertController,它显示为一个AlertView。在关闭UIAlertController之前,我想验证UITextField的输入。基于验证我想忽略UIAlertController或不。但我没有线索如何防止UIAlertController的按下按钮时关闭动作。有没有人解决这个问题或任何想法从哪里开始?我去google,但没有运气:/谢谢!
您是正确的:如果用户可以点击您的快讯中的按钮,该提醒将被关闭。所以你想防止用户点击按钮!这只是一个问题,禁用您的UIAlertAction按钮。如果禁用警报操作,则用户无法点按它以关闭。
要将此与文本字段验证结合使用,请使用文本字段委托方法或操作方法(在创建文本字段的配置处理程序时配置),以根据输入的文本(或未输入)适当地启用/禁用UIAlertActions 。
这里有一个例子。我们创建了这样的文本字段:
alert.addTextFieldWithConfigurationHandler { (tf:UITextField!) in tf.addTarget(self,action: "textChanged:",forControlEvents: .EditingChanged) }
我们有一个取消操作和一个确定操作,我们带来了确定行动到世界禁用:
(alert.actions[1] as UIAlertAction).enabled = false
随后,用户无法点击确定,除非文本字段中有一些实际文本:
func textChanged(sender:AnyObject) { let tf = sender as UITextField var resp : UIResponder = tf while !(resp is UIAlertController) { resp = resp.nextResponder() } let alert = resp as UIAlertController (alert.actions[1] as UIAlertAction).enabled = (tf.text != "") }
EDIT这里是当前(Swift 3.0.1)版本的上述代码:
alert.addTextField { tf in tf.addTarget(self,action: #selector(self.textChanged),for: .editingChanged) }
和
alert.actions[1].isEnabled = false
和
func textChanged(_ sender: Any) { let tf = sender as! UITextField var resp : UIResponder! = tf while !(resp is UIAlertController) { resp = resp.next } let alert = resp as! UIAlertController alert.actions[1].isEnabled = (tf.text != "") }