我在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)
答案 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
}
}