У меня есть tableView cell
с textfield
, который также показывает picker
, где я отображаю отфильтрованный список данных и фильтрую по входным символам.Я использую IQkeyboardManager
и McPicker
.Когда пользователь начинает редактирование, picker
представляется как модальный.Затем, если значение выбрано из списка выбора, picker
отклоняется.
И проблема в том, что когда я нажимаю done
на клавиатуре (вызывая didEndEditing
) на консоли, я вижу, как приложение вызывает didEndEditing
- затем beginEditing
, а затем обрабатывает строки кода на @IBAction func editDidBegin(_ sender: UITextField)
снова
вот мой код:
class QuickOrderVC: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {
/* some code */
@IBAction func editDidBegin(_ sender: UITextField) {
print("didBegin")
/* some code */
McPicker.showAsPopover(data: [filteredArr], fromViewController: self, sourceView: sender as! UIView, doneHandler: { [weak self] (selections: [Int : String]) -> Void in
if let first = selections[0]{
/* some code */
self?.dismissKeyboard()
return
}
}, cancelHandler: { () -> Void in
/* some code */
print("Canceled Popover begin")
self.dismissKeyboard()
}, selectionChangedHandler: { (selections: [Int:String], componentThatChanged: Int) -> Void in
let newSelection = selections[componentThatChanged] ?? "Failed to get new selection!"
print("Component \(componentThatChanged) changed value to \(newSelection)")
})
}
var filteredArr = [String]()
@IBAction func sizeTextEditingChanged(_ sender: UITextField) {
/* some code */
self.presentedViewController?.dismiss(animated: false, completion: {
McPicker.showAsPopover(data: [filteredArr], fromViewController: self, sourceView: sender as! UIView, doneHandler: { [weak self] (selections: [Int : String]) -> Void in
if let first = selections[0]{
/* some code */
print("done Popover edit")
self?.presentedViewController?.dismiss(animated: false, completion: nil)
print("done Popover dismiss")
/* some code */
self?.dismissKeyboard()
return
}
}, cancelHandler: { () -> Void in
/* some code */
print("Canceled Popover edit")
self.presentedViewController?.dismiss(animated: false, completion: nil)
print("Canceled Popover dismiss")
self.dismissKeyboard()
return
}, selectionChangedHandler: { (selections: [Int:String], componentThatChanged: Int) -> Void in
let newSelection = selections[componentThatChanged] ?? "Failed to get new selection!"
print("Component \(componentThatChanged) changed value to \(newSelection)")
})
})
}
@IBAction func editDidEnd(_ sender: UITextField) {
print("did end")
self.presentedViewController?.dismiss(animated: false, completion: nil)
print("did end - dismiss")
return
}
и на консоли:
did end // when tap `done` at keyboard
didBegin // why??
did end - dismiss
did end //why duplicate??
did end - dismiss
done Popover edit
done Popover dismiss