iOS UIDatePicker

时间:2020-02-23 14:45:56  来源:igfitidea点击:

在本教程中,我们将讨论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以编程方式进行了相同的操作