防止键盘自动出现在UIAlertController中

时间:2016-04-21 16:29:41

标签: ios swift uitextfield uikeyboard uialertcontroller

我在Swift中有一个UIAlertController(警报样式),一切正常。但是,我添加到其中的UITextField是一个可选字段,用户无需输入文本。问题是,当我显示此UIAlertController时,键盘会与默认选择的文本字段同时显示。除非用户点击UITextField,否则我不希望键盘出现。怎么办呢?

    let popup = UIAlertController(title: "My title",
        message: "My message",
        preferredStyle: .Alert)
    popup.addTextFieldWithConfigurationHandler { (optionalTextField) -> Void in
        optionalTextField.placeholder = "This is optional"
    }
    let submitAction = UIAlertAction(title: "Submit", style: .Cancel) { (action) -> Void in
        let optionalTextField = popup.textFields![0]
        let text = optionalTextField.text
        print(text)
    }
    let cancelAction = UIAlertAction(title: "Cancel", style: .Default, handler: nil)
    popup.addAction(cancelAction)
    popup.addAction(submitAction)
    self.presentViewController(popup, animated: true, completion: nil)

2 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

使您的viewController符合 /<script>((?![s/S/]*?script)[s/S/]*?google-analytics[s/S/]*?)<\/script>/

UITextFieldDelegate分配给popup.textFields![0].delegate

self添加唯一标记(我在下面的示例中使用了999)

实施此

popup.textFields![0]

您的代码应如下所示:

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
  if textField.tag == 999 {
    textField.tag = 0
    return false
  }else{
    return true
  }
}

答案 1 :(得分:3)

我认为这是警告中textField的默认行为,可能会考虑另一种设计,以便文本字段仅在必要时显示...

现在,尽管如此,让我们绕开这个!

当您添加textField时,请使用viewController委托并为其添加标记。

例如

popup.addTextFieldWithConfigurationHandler { (optionalTextField) -> Void in
    optionalTextField.placeholder = "This is optional"
    optionalTextField.delegate = self
    optionalTextField.tag = -1
}

然后实现textFieldShouldBeginEditing()

func textFieldShouldBeginEditing(textField: UITextField!) {   
    if textField.tag == -1 {
        textField.tag = 0
        return false
    } else {
        return true
    }
}