Как создать расширение DatePicker - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь переместить код выбора даты, который присоединяется к текстовому полю, в расширение.Я борюсь с рефакторингом кода @objc.Я не уверен, как ссылаться на текстовое поле и указатель даты в коде doneButtonPressed.

extension UIViewController {


    func datePicker(dateValue: UITextField) {

        let datePicker = UIDatePicker()

        datePicker.datePickerMode = .date

        let toolbar = UIToolbar()
        toolbar.sizeToFit()

        let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(dateDonePressed))
        toolbar.setItems([doneButton], animated: false)

        dateValue.inputAccessoryView = toolbar

        dateValue.inputView = datePicker
    }

    @objc func dateDonePressed() {


        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .medium
        dateFormatter.timeStyle = .none

        self.dateValue.text = dateFormatter.string(from: self.datePicker.date)
        self.view.endEditing(true)
    }
}

1 Ответ

1 голос
/ 10 марта 2019

Я бы просто добавил переменные в классе:

class ViewController {

    var textField: UITextField!
    var datePicker: UIDatePicker!

    override var viewDidLoad() {
        super.viewDidLoad() 
        ...// either set up textField here or in the extension
        datePicker.inputView = datePicker

}
extension ViewController {
    func datePicker(dateValue textField: UITextField){
        // if you decided to set the textfield in the extension, then:
        self.textField = textField
    }   
}

Я не знаю, кто звонит datePicker(dateValue, но если оттуда есть доступ к текстовому полю, то, вероятно, текстовое поле должно было быть установлено и настроено откуда-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...