Подтвердить что ты не робот

Swift UIDatePicker для ввода текстового поля - как заставить UIDatePicker исчезнуть?

Это моя первая попытка использовать Swift или приложение для iPhone, так что, разумеется, я не знаю, как сделать много вещей на этом этапе.

Прямо сейчас у меня есть контроллер представления с текстовым полем и кнопкой. Мне удалось найти пример кода, чтобы почти выполнить то, что мне нужно. Я хотел бы сделать следующее:

  1. Когда я UIDatePicker в текстовом поле, на экране появляется UIDatePicker.
  2. Установите в UIDate отображение только времени, а не даты.
  3. Поместите выбранное время UIDatePicker в текстовое поле.
  4. Пусть UIDatePicker уйдет, когда я UIDatePicker на кнопку.

С 1 по 3 работает. Но я не могу понять, как заставить UIDatePicker уйти и вернуться на экран, если я снова UIDatePicker на текстовое поле.

import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var dateField: UITextField!

    @IBAction func dateField(sender: UITextField) {

        var datePickerView  : UIDatePicker = UIDatePicker()
        datePickerView.datePickerMode = UIDatePickerMode.Time
        sender.inputView = datePickerView
        datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)

    }
    @IBAction func DoneButton(sender: UIButton) {

        //How to make datepicker disappear???
    }

    func handleDatePicker(sender: UIDatePicker) {
        var timeFormatter = NSDateFormatter()
        timeFormatter.dateStyle = .NoStyle
        timeFormatter.timeStyle = .ShortStyle
        dateField.text = timeFormatter.stringFromDate(sender.date)
    }

    override func viewDidLoad() {
     super.viewDidLoad()
     // Do any additional setup after loading the view, typically from a nib.

    }

}
4b9b3361

Ответ 1

Вы вызываете resignFirstResponder в текстовое поле:

@IBAction func DoneButton(sender: UIButton) {
    dateField.resignFirstResponder()
}

Кроме того, не очень хорошая идея иметь метод и свойство с тем же именем - не уверен, что там есть приоритет, но, скорее всего, это может сбить с толку в какой-то момент.

Ответ 2

Вы также можете просто создать выход для datePicker.  @IBOutlet слабый var datePicker: UIPickerView!

то в вашей функции

@IBAction func DoneButton(sender: UIButton) {

    datePicker.hidden = true
}

Ответ 3

Вы можете попробовать что-то как gestureRecognizer чтобы UIDatePicker исчез:

@objc func viewTapped(gestureRecognizer: UITapGestureRecognizer) {
   view.endEditing(true)    
}

Это то, что я использовал в своем приложении, поэтому, когда пользователь нажимает на любое место на экране, UIDatePicker исчезает!