swift - редактирование вызова текстового поляDidBegin после editDidEnd - PullRequest
0 голосов
/ 20 мая 2019

У меня есть 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
...