0

我有一个tableView cellwith textfield,它也显示picker,我在其中显示过滤的数据列表,并按输入符号过滤。我正在使用IQkeyboardManagerMcPicker。当用户开始编辑时,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
4

0 回答 0