通常view.endEditing(true)
始終在iOS上快速刪除鍵盤。解除UIAlertController上的鍵盤UITextField
然而,這並不總是正確的,當UITextField
是一個self.present()
「編模態view
即,在該self.addDoneButtonOnKeyboard
方法的UIAlertController
實施例內部的形式
let alert = UIAlertController(title: _title, message: "Choose", preferredStyle: .alert)
let numberLabel = UILabel(frame: CGRect(x:10, y:0, width:90, height:20))
numberLabel.textColor = .black
numberLabel.textAlignment = NSTextAlignment.left
numberLabel.font = UIFont(name: titleLabel.font.fontName, size: 16)
numberLabel.font = UIFont.boldSystemFont(ofSize: titleLabel.font.pointSize)
numberLabel.text = "Quantity"
let quantityField = UITextField(frame: CGRect(x:100, y:0, width:140, height:25))
quantityField.layer.borderWidth = 1
quantityField.keyboardType = .numberPad
quantityField.layer.borderColor = UIColor.lightGray.cgColor
quantityField.delegate = self
self.addDoneButtonOnKeyboard(textField: quantityField)
self.present(alert, animated: true, completion: nil)
現在我有這樣的部分等漂亮的代碼
func addDoneButtonOnKeyboard(textField: UITextField){
let doneToolbar: UIToolbar = UIToolbar(frame: CGRect(x:0, y:0, width:320, height:50))
doneToolbar.barStyle = UIBarStyle.default
let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(ViewControllerDisplay.doneButtonAction(_:)))
let items = NSMutableArray()
items.add(flexSpace)
items.add(done)
doneToolbar.items = items as? [UIBarButtonItem]
doneToolbar.sizeToFit()
textField.inputAccessoryView = doneToolbar
}
@objc func doneButtonAction(_ btn: UIBarButtonItem){
view.endEditing(true)
}
所有這一切的目的是讓一個「完成」k出現按鈕板按鈕。它的確如此。實際上它看起來不錯,我還可以捕獲doneButtonAction()
這個很棒的事件,但是我只捕獲了UIBarButtonItem
,所以我不能使用UITextField.resignFirstResponder()
方法,儘管我知道它會起作用。我必須使用「查看」
我想要做的就是呼叫alert.endEditting(true)
,但我已經試圖通過子視圖循環,篩查的UIAlertController
任何事件,而是self.present
不工作的方式
誰能幫助我清除了這個鍵盤的警報視圖?