Swift UIDatePicker для ввода текстового поля - как заставить UIDatePicker исчезнуть?
Это моя первая попытка использовать Swift или приложение для iPhone, так что, разумеется, я не знаю, как сделать много вещей на этом этапе.
Прямо сейчас у меня есть контроллер представления с текстовым полем и кнопкой. Мне удалось найти пример кода, чтобы почти выполнить то, что мне нужно. Я хотел бы сделать следующее:
- Когда я
UIDatePicker
в текстовом поле, на экране появляется UIDatePicker
. - Установите в
UIDate
отображение только времени, а не даты. - Поместите выбранное время
UIDatePicker
в текстовое поле. - Пусть
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.
}
}
Ответы
Ответ 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 исчезает!