2016-05-13 52 views
1

我做了一个AlertViewControllertextField,要求用户输入数据模型的新项目的名称。禁用UIAlertView中的按钮,而文本字段为空

所以我想保持提交按钮禁用,而文本字段为空。在其他情况下,当我创建@IBOutletViewController从故事板textfield我可以只使用UITextFieldDelegate协议中的一些方法,并解决问题没有你的帮助。

但现在我不能。

+0

检查这个链接,它可能会帮助你:http://useyourloaf.com/blog/uialertcontroller-changes-in-ios-8/ –

+0

谢谢,非常有用,但翻译成我的母语需要时间 - 很快,但我已经看到答案... –

回答

2

注册文本字段更改通知和验证文本字段有:

@IBAction func showAlert(sender: AnyObject) { 

    var alert = UIAlertController(title: "New user", 
     message: "Add a new user", 
     preferredStyle: .Alert) 

    let saveAction = UIAlertAction(title: "Save", 
     style: .Default) { (action: UIAlertAction!) -> Void in 

      println("do your stuff here") 
    } 

    saveAction.enabled = false 

    let cancelAction = UIAlertAction(title: "Cancel", 
     style: .Default) { (action: UIAlertAction!) -> Void in 
    } 


    alert.addTextFieldWithConfigurationHandler { 
     (textFieldName: UITextField!) in 
     textFieldName.placeholder = "Enter full name" 
    } 

    alert.addTextFieldWithConfigurationHandler { 
     (textFieldEmail: UITextField!) in 
     textFieldEmail.placeholder = "Enter valid email adress" 
     textFieldEmail.keyboardType = .EmailAddress 

    } 
// adding the notification observer here 
NSNotificationCenter.defaultCenter().addObserverForName(UITextFieldTextDidChangeNotification, object:alert.textFields?[0], 
     queue: NSOperationQueue.mainQueue()) { (notification) -> Void in 

      let textFieldName = alert.textFields?[0] as! UITextField 
      let textFieldEmail = alert.textFields![1] as! UITextField 
      saveAction.enabled = self.isValidEmail(textFieldEmail.text) && !textFieldName.text.isEmpty 
    } 


    NSNotificationCenter.defaultCenter().addObserverForName(UITextFieldTextDidChangeNotification, object:alert.textFields?[1], 
     queue: NSOperationQueue.mainQueue()) { (notification) -> Void in 

      let textFieldEmail = alert.textFields?[1] as! UITextField 
      let textFieldName = alert.textFields?[0] as! UITextField 
      saveAction.enabled = self.isValidEmail(textFieldEmail.text) && !textFieldName.text.isEmpty 
    } 


    alert.addAction(saveAction) 
    alert.addAction(cancelAction) 

    presentViewController(alert, 
     animated: true, 
     completion: nil) 

} 

// email validation code method 
func isValidEmail(testStr:String) -> Bool { 
    let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" 
    if let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx) as NSPredicate? { 
     return emailTest.evaluateWithObject(testStr) 
    } 
    return false 
} 
0

在viewDidLoad方法

let notificationCenter = NSNotificationCenter.defaultCenter() 
notificationCenter.addObserver(
self, 
selector: "textFieldTextChanged:", 
name:UITextFieldTextDidChangeNotification, 
object: nil 
) 

添加此代码,并在视图控制器

这种方法
func textFieldTextChanged(sender : AnyObject) { 
//your code 
} 
+0

谢谢,我想过使用通知,但有人怀疑为我的小任务使用如此强大的机制:) –

相关问题