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以编程方式进行了相同的操作

