在警报控制器隐藏之前检查TextField中的值-IOS Swift



我要做的是我正在使用用户的联系电话(手机号码),如果它是正确的,则应继续注册,否则警报控制器不应隐藏并显示某些错误

let alertController = UIAlertController(title: "Phone Number", message: "Please enter your number", preferredStyle: .alert)
alertController.addTextField {
     (textField) -> Void in
      textField.tag = 128
      textField.delegate = self
      textField.placeholder = "923xxxxxxxxx"
}
alertController.addAction(UIAlertAction(title: "Continue", style: .default, handler: {
      alert -> Void in
      let textField = alertController.textFields![0] as UITextField
      if (textField.text?.count)! == 12 && ((textField.text?.substring(to: 3))!) == "923" {
          //my code
      }
      else {
          //should show/keep alert controler
      }
}))             
self.present(alertController, animated: true, completion: nil)

尝试一下,

let alertController = UIAlertController(title: "Phone Number", message: "Please enter your number", preferredStyle: .alert)
alertController.addTextField {
    (textField) -> Void in
    textField.tag = 128
    textField.delegate = self
    textField.placeholder = "923xxxxxxxxx"
}
alertController.addAction(UIAlertAction(title: "Continue", style: .default, handler: {
    alert -> Void in
    let textField = alertController.textFields![0] as UITextField
    if (textField.text?.count)! == 12 && ((textField.text?.substring(to: 3))!) == "923"
      {
        //my code
    }
    else
    {
        //alert with error
        let alertControllerError = UIAlertController(title: "error", message: "error here", preferredStyle: .alert)
        alertControllerError.addAction(UIAlertAction(title: "ok", style: .default, handler: { alert -> Void in
        }))
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(1)) {
            self.present(alertControllerError, animated: true, completion: nil)
        }
    }
}))
self.present(alertController, animated: true, completion: nil)

您默认可以禁用按钮(UIAlertAction)。然后收听UITextField中的文本更改,并相应地更新按钮:

var autoEnableAlertAction: UIAlertAction?
func presentAlertController() {
    // alert controller
    let ac = UIAlertController(title: "Registration", message: "Please enter your phone number.", preferredStyle: .Alert)
    // alert action - disabled by default
    let okAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
    okAction.enabled = false
    ac.addAction(okAction)
    // store a reference to the alert action to enable / disable it later
    autoEnableAlertAction = okAction
    ac.addTextFieldWithConfigurationHandler { tf in
        // listen for changes in the textfield
        tf.addTarget(self, action: #selector(self.checkTextFieldText(_:)), forControlEvents: .EditingChanged)
    }
    presentViewController(ac, animated: true, completion: nil)
}
@objc func checkTextFieldText(textField: UITextField) {
    autoEnableAlertAction?.enabled = textField.text?.characters.count >= 5
}

对不起,我的回答是Swift 2版本...:)

func presentAlertController()
{
    let alertController = UIAlertController(title: "Phone Number", message: "Please enter your number", preferredStyle: .alert)
    alertController.addTextField {
        (textField) -> Void in
        textField.tag = 128
        textField.placeholder = "923xxxxxxxxx"
    }
    alertController.addAction(UIAlertAction(title: "Continue", style: .default, handler: {
        alert -> Void in
        let textField = alertController.textFields![0] as UITextField
        if (textField.text?.count)! == 12 && textField.text?.prefix(3) == "923"
        {
            print("sucess")
        }
        else
        {
            print("Incorrect Number")

            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(2)) {
                self.presentAlertController(parameters: parameters)
            }
        }
    }))
    alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler:{
        alert -> Void in
    }))
    self.present(alertController, animated: true, completion: nil)
}

最新更新