2017-10-28 144 views
0

通常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不工作的方式

誰能幫助我清除了這個鍵盤的警報視圖?

回答

0

我固定它通過得到的最頂級視圖控制器,並呼籲endEditing(true)我認爲這個問題應保持了它的人1天相當有用的珍品

@objc func doneButtonAction(_ btn: UIBarButtonItem){ 
    if var topController = UIApplication.shared.keyWindow?.rootViewController { 
     while let presentedViewController = topController.presentedViewController { 
      topController = presentedViewController 
     } 
     topController.view.endEditing(true) 
    } 
}