iOS UIDatePicker
在本教程中,我们将讨论UIDatePicker类,并在我们的iOS应用程序中实现其各种用例。
UIDatePicker
UIDatePicker类是UIPickerView的子类。
UIDatePicker控件用于显示和选择PickerView中的日期和时间值。
UIDatePicker由日期,时间,秒等的多个组件组成。
我们可以指定连续行之间的timeInterval。
以下是UIDatePicker的四种主要模式:
- 日期
- dateAndTime –默认
- 时间
- 倒计时器
我们可以从Interface Builder或者使用属性" datePickerMode"在UIDatePicker上设置模式。
我们还可以配置语言环境,时区。
date属性代表UIDatePicker中当前选择的日期。
我们可以在界面构建器中设置" minimumDate"和" maximumDate"属性,也可以在Swift类中使用等效属性。
使用NSDateFormatter
或者NSCalendar
类,我们可以格式化从UIDatePicker返回的日期。
分钟间隔属性用于设置时间间隔。
我们可以从Interface Builder在ViewController中创建IBAction。
当UIDatePicker中发生事件时,将触发IBAction方法。
该事件通常为valueChanged:
@IBAction func doSomething(sender: UIDatePicker, forEvent event: .valueChanged)
要将其从Interface Builder连接到Swift类,我们只需Ctrl +拖放即可。
这样会打开一个对话框:
如果miniumDate大于maximumDate,则将返回默认日期。
" UIDatePickerView"可以显示超出指定的" minimumDate"之外的日期。
但是,一旦离开触摸控件,UIDatePickerView就会滑回到最小日期。
为了改变UIDatePickerView的背景,我们只使用backgroundColor
属性。
textColor没有公共属性。
但是我们总是可以使用那里的键来更改它们。
datePicker.setValue(UIColor.brown, forKey: "textColor")
为了禁用当前突出显示的日期,我们可以将以下属性设置为false:
datePicker.setValue(false, forKey: "highlightsToday")
在下一节中,我们将以两种方式创建" UIDatePickerView",并格式化要在" UILabel"和" UITextField"中显示的日期。
代码
下面给出了ViewController.swift文件的代码:
import UIKit class ViewController: UIViewController { @IBOutlet weak var myDatePicker: UIDatePicker! @IBOutlet weak var labelTwo: UILabel! @IBOutlet weak var labelOne: UILabel! @IBOutlet weak var myTextField: UITextField! let datePicker = UIDatePicker() @IBAction func dateMode(_ sender: Any) { datePicker.datePickerMode = .date } @IBAction func timeMode(_ sender: Any) { datePicker.datePickerMode = .time } @IBAction func countdownMode(_ sender: Any) { datePicker.datePickerMode = .countDownTimer } override func viewDidLoad() { super.viewDidLoad() myDatePicker.addTarget(self, action: #selector(ViewController.datePickerValueChanged(_:)), for: .valueChanged) createDatePicker() createToolbar() } func createDatePicker() { datePicker.datePickerMode = .dateAndTime datePicker.backgroundColor = .white datePicker.minuteInterval = 30 datePicker.setValue(UIColor.brown, forKey: "textColor") myTextField.inputView = datePicker } func createToolbar() { let toolBar = UIToolbar() toolBar.barStyle = .default toolBar.isTranslucent = true toolBar.sizeToFit() let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(ViewController.doneClick)) toolBar.setItems([doneButton], animated: false) toolBar.isUserInteractionEnabled = true myTextField.inputAccessoryView = toolBar } @objc func doneClick() { let dateFormatter = DateFormatter() dateFormatter.dateStyle = .medium dateFormatter.timeStyle = .medium myTextField.text = dateFormatter.string(from: datePicker.date) myTextField.resignFirstResponder() } @objc func datePickerValueChanged(_ sender: UIDatePicker){ let dateFormatter: DateFormatter = DateFormatter() dateFormatter.dateFormat = "MM/dd/yyyy hh:mm a" let selectedDate: String = dateFormatter.string(from: sender.date) labelOne.text = selectedDate let components = Calendar.current.dateComponents([.year, .month, .day], from: sender.date) if let day = components.day, let month = components.month, let year = components.year { labelTwo.text = "Day: \(day) Month: \(month) Year: \(year)" } } }
在上面的代码中,我们在情节提要中创建了一个UIDatePicker,并以编程方式创建了另一个。
以编程方式显示UITextField中格式化的日期。
情节提要中的UIDatePicker使用每个UILabel中的NSDateFormatter和Calendar类显示日期。
我们已将" minuteInterval"设置为30分钟。
除了使用IBAction之外,我们还使用addTarget
以编程方式进行了相同的操作