#selector функция не запускается для UIDatePicker - PullRequest
1 голос
/ 06 мая 2020

У меня есть очень простой CustomIDatePicker класс, написанный на Swift 5 , у которого есть панель инструментов вверху, содержащая кнопку «Готово». Проблема в том, что функция, связанная с этой кнопкой, кажется, никогда не запускается.

class CustomDatePicker: UIDatePicker {

    var zTextField: UITextField!

    let toolbar = UIToolbar()

    // bar buttons
    let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed(sender:)))

    convenience init(textField: UITextField) {
        self.init()

        toolbar.sizeToFit()
        toolbar.setItems([doneBtn], animated: true)

        self.datePickerMode = .date

        // link up the Text Field
        zTextField = textField
        zTextField.inputAccessoryView = toolbar
        zTextField.inputView = self
    }

    @objc func donePressed (sender: UIBarButtonItem) {
        print("done pressed") // this line fail to appear on the debugger
    }
}

Очень простой ViewController для проверки этого класса:

class ViewController: UIViewController {

    @IBOutlet weak var theTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        let datePicker = CustomDatePicker(textField: theTextField)
    }
}

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 06 мая 2020

Вам необходимо установить цель, для этого вам нужно переместить экземпляр кнопки панели в инициализации компонента.

class CustomDatePicker: UIDatePicker {

    var zTextField: UITextField!

    let toolbar = UIToolbar()

    // bar buttons

    convenience init(textField: UITextField) {
        self.init()
        let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed(sender:)))
        toolbar.sizeToFit()
        toolbar.setItems([doneBtn], animated: true)

        self.datePickerMode = .date

        // link up the Text Field
        zTextField = textField
        zTextField.inputAccessoryView = toolbar
        zTextField.inputView = self
    }

    @objc func donePressed (sender: UIBarButtonItem) {
        print("done pressed") // this line fail to appear on the debugger
    }
}
...