2017-10-28 12 views
0

通常view.endEditing(true)は、常にiOSでキーボードを削除します。UIAlertControllerでキーボードを閉じるUITextField

は、しかし、これはUITextFieldself.present()「EDモーダルviewすなわち、このself.addDoneButtonOnKeyboard方法で

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) 

UIAlertController

例内部のフォーム私はこれの一部である場合のように、常に真ではありませんニフティコード

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

は、私はそれが誰かの一日のために非常に便利珍味だまでこの質問は残るべきだと思うするtopMostビューコントローラを取得し、endEditing(true)を呼び出すことによってそれを修正

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