テキストフィールドの入力ビューとして日付ピッカーを設定しました。日付ピッカーの日付と間隔の最小値は 15 分です。これで、値が変更されたデリゲートでスピンを変更する際に適切な日付が得られます。しかし、ピッカーをスピンせず、デフォルトを最初に選択して完了ボタンをタップすると、現在の日付のみが表示されます。デフォルトでピッカーに表示される日付を教えてくれると思います。コードは次のとおりです。
class ViewController: UIViewController {
@IBOutlet weak var timeField: UITextField!
var datePicker:UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func CallPicker(sender: UITextField) {
let datePickerView:UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.DateAndTime
datePickerView.minuteInterval = 15
datePickerView.minimumDate = NSDate()
datePicker = datePickerView
let toolBar = UIToolbar()
toolBar.sizeToFit()
let spaceButton = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(title: "Done", style: .Plain, target: self, action: "doneTapped")
toolBar.setItems([spaceButton, doneButton], animated: false)
toolBar.userInteractionEnabled = true
sender.inputView = datePickerView
sender.inputAccessoryView = toolBar
datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
}
func doneTapped() {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .MediumStyle
timeField.text = dateFormatter.stringFromDate(datePicker.date)
timeField.resignFirstResponder()
}
func datePickerValueChanged(sender: UIDatePicker) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .MediumStyle
timeField.text = dateFormatter.stringFromDate(sender.date)
}
}
シナリオ: 今が 8:42 だとします。日付ピッカーは最初のエントリとして 8:30 を表示しますが、完了ボタンをタップすると、現在の時刻である 8:42 のみが表示されます。ただし、スピンを転がして最初のエントリに戻るとうまく機能します。