UIDatePicker: выберите текущую дату (быстро) - PullRequest
0 голосов
/ 02 мая 2019

У меня есть UIDatePicker, в котором какая-то дата установлена ​​по умолчанию. С addTarget я слушаю события valueChanged и все работает правильно, когда колесо вращается.

Я хочу разрешить пользователям напрямую выбирать начальную дату (например, нажав на нее). Но сейчас событие наступает только тогда, когда колесо крутится. Чтобы поставить текущую дату, пользователю необходимо:

  1. Поставить новую дату
  2. Перейти к предыдущей дате

Мой код:

class Picker {
    init() {
        let datePicker = UIDatePicker()
        datePicker.setDate(Date(), animated: false) // Set initial date
        datePicker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
    }

    @objc func handleDatePicker(sender: UIDatePicker) {
        print(sender.date)
    }
}

Picker()

Скриншот:

enter image description here

РЕШЕНИЕ:

Самым правильным решением оказалось добавление UIToolBar с кнопкой Done. Код можно найти здесь: пример с UIToolBar

1 Ответ

0 голосов
/ 02 мая 2019

для выбора первого значения индекса по нажатию кнопки «Готово» в DatePicker

func pickUp (_ textField: UITextField) {

    // UIPickerView
    self.myPickerView = UIPickerView(frame:CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 216))
    self.myPickerView.delegate = self
    self.myPickerView.dataSource = self
    self.myPickerView.backgroundColor = UIColor.white
    textField.inputView = self.myPickerView

    // ToolBar
    let toolBar = UIToolbar()
    toolBar.barStyle = .default
    toolBar.isTranslucent = true
    toolBar.tintColor = UIColor.darkGray
    toolBar.sizeToFit()

    // Adding Button ToolBar
    let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(UrVC.doneClick))
    let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(UrVC.cancelClick))
    toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
    toolBar.isUserInteractionEnabled = true
    textField.inputAccessoryView = toolBar

}

@ objc func doneClick () {

    pickerTxtfld.resignFirstResponder()
    let indexPath = myPickerView.selectedRow(inComponent: 0)
    pickerTxtfld.text = dataArray[indexPath]


}
@objc func cancelClick() {
    pickerTxtfld.resignFirstResponder()
}
...