当前位置: 首页 > 面试题库 >

如何验证UIAlertController中的TextField?

宗政颖逸
2023-03-14
问题内容

谁能告诉我如何UITextFields在内验证UIAlertController

我需要它来防止用户单击“保存”,除非同时输入了两个字段。

到目前为止,这是我的代码:

@IBAction func btnStart(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

            self.textFieldName = alert.textFields![0] as UITextField
            self.textFieldEmail = alert.textFields![1] as UITextField
            self.saveUser(self.textFieldName.text, email: self.textFieldEmail.text)
            self.tableView.reloadData()
    }

    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

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

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

这是我用于验证电子邮件字段的功能:

func isValidEmail(testStr:String) -> Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"

    if let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx) {
        return emailTest.evaluateWithObject(testStr)
    }
    return false
}

问题答案:

这可以通过扩展UIAlertViewController

extension UIAlertController {

    func isValidEmail(_ email: String) -> Bool {
        return email.characters.count > 0 && NSPredicate(format: "self matches %@", "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,64}").evaluate(with: email)
    }

    func isValidPassword(_ password: String) -> Bool {
        return password.characters.count > 4 && password.rangeOfCharacter(from: .whitespacesAndNewlines) == nil
    }

    func textDidChangeInLoginAlert() {
        if let email = textFields?[0].text,
            let password = textFields?[1].text,
            let action = actions.last {
            action.isEnabled = isValidEmail(email) && isValidPassword(password)
        }
    }
}

// ViewController
override func viewDidLoad() {
    super.viewDidLoad()

    let alert = UIAlertController(title: "Please Log In", message: nil, preferredStyle: .alert)

    alert.addTextField {
        $0.placeholder = "Email"
        $0.addTarget(alert, action: #selector(alert.textDidChangeInLoginAlert), for: .editingChanged)
    }

    alert.addTextField {
        $0.placeholder = "Password"
        $0.isSecureTextEntry = true
        $0.addTarget(alert, action: #selector(alert. textDidChangeInLoginAlert), for: .editingChanged)
    }

    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))

    let loginAction = UIAlertAction(title: "Submit", style: .default) { [unowned self] _ in
        guard let email = alert.textFields?[0].text,
            let password = alert.textFields?[1].text
            else { return } // Should never happen

        // Perform login action
    }

    loginAction.isEnabled = false
    alert.addAction(loginAction)
    present(alert, animated: true)
}

在此处输入图片说明



 类似资料:
  • 问题内容: 我创建了一个UIAlertController 但是之后,我想更改UIAlertController的高度吗?我怎样才能做到这一点? 问题答案: 我发现您可以在显示视图控制器之前添加约束

  • 问题内容: 我可以改变颜色吗?标准颜色是蓝色。而且它与标准iOS应用程序非常接近。是否可定制?我该如何改变颜色?例如按钮颜色。 谢谢! 问题答案: 您可以只更改基础视图的,但是由于iOS 9(https://openradar.appspot.com/22209332)中引入的一个已知错误,因此tintColor被应用程序窗口的覆盖。 您可以: 在AppDelegate中更改应用程序。 } 在完成

  • 问题内容: 我正在尝试显示带有的。当我添加行时: 我收到一个错误: 致命错误:解开Optional值时意外发现nil 这通过呈现在我的内部。 我已经从这里下载了代码,并且工作正常。我将该方法复制并粘贴到我的代码中,但它中断了。最后一行的 自我 存在没有影响。 问题答案: 因此,我开始检查看看我的代码与工作代码之间可能有什么不同。我注意到我的ViewController扩展了 显然这意味着我需要设置

  • 问题内容: 我正在尝试在文件中创建如下。 问题是我发现了问题 类型“配置”没有成员“窗口” 请让我知道如何解决该问题。 问题答案: 表示该类中有一个对象,事实并非如此。 您将需要与with 一起使用,但这无济于事,因为此窗口实际上并不代表任何现有的窗口,而且它也不是视图控制器。 因此,我建议您将要使用的实际视图控制器传递给该方法: 然后从可使用UIViewController对象的类中调用它。

  • 问题内容: 我在中添加了。我想更改文本字段的高度。我已经尝试过这种方式: 没用 问题答案: 这具有 约束条件 。

  • 问题内容: 如何验证文本字段以仅在Swing中的小数点后输入4位数字? 问题答案: 可以使用进行Swing中的任何验证。 1.首先创建自己的输入验证器: 2.然后将该类的实例分配给您的文本字段。(实际上任何都可以验证) 当然,您也可以使用匿名内部类,但是如果将验证器也用于其他组件,则普通类会更好。 还可以查看SDK文档:JComponent#setInputVerifier。