iOS Swift 3 - UIDatePicker

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/40484182/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 10:44:17  来源:igfitidea点击:

iOS Swift 3 - UIDatePicker

iosswiftswift3uidatepicker

提问by Anthony Shahine

I have a UIDatePickerthat shows the day, month and the year. But I don't know how to get those parameters.

我有一个UIDatePicker显示日期,月份和年份。但我不知道如何获取这些参数。

So What is the best way to get the day, month and year from UIDatePickerusing Swift 3?

那么UIDatePicker使用 Swift 3获得日、月和年的最佳方法是什么?

回答by Enamul Haque

UIDatePicker in Swift 3 and Swift 4 example.

Swift 3 和 Swift 4 示例中的 UIDatePicker。

In Swift 3 You can use

在 Swift 3 中你可以使用

  1. Create Simple Project of Single View Application in swift 3
  2. Drag a text field & connect to viewController
  3. Date picker look like image
  1. 在 swift 3 中创建单视图应用程序的简单项目
  2. 拖动文本字段并连接到 viewController
  3. 日期选择器看起来像图像

enter image description here

在此处输入图片说明

  1. ViewController code is bellow..

      class ViewController: UIViewController {
         //Text Field Connection
       @IBOutlet weak var txtDatePicker: UITextField!
       //Uidate picker
       let datePicker = UIDatePicker()
    
        override func viewDidLoad() {
        super.viewDidLoad()
       //show date picker
         showDatePicker()
      }
    
    
       func showDatePicker(){
       //Formate Date
        datePicker.datePickerMode = .date
    
        //ToolBar
       let toolbar = UIToolbar();
       toolbar.sizeToFit()
    
       //done button & cancel button
        let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: "donedatePicker")
        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
       let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.bordered, target: self, action: "cancelDatePicker")
       toolbar.setItems([doneButton,spaceButton,cancelButton], animated: false)
    
    // add toolbar to textField
    txtDatePicker.inputAccessoryView = toolbar
     // add datepicker to textField
    txtDatePicker.inputView = datePicker
    
       }
    
     func donedatePicker(){
      //For date formate
       let formatter = DateFormatter()
       formatter.dateFormat = "dd/MM/yyyy"
       txtDatePicker.text = formatter.string(from: datePicker.date)
       //dismiss date picker dialog
       self.view.endEditing(true)
        }
    
          func cancelDatePicker(){
           //cancel button dismiss datepicker dialog
            self.view.endEditing(true)
          }
       }
    
  2. Full Source project is given to github. github Link:https://github.com/enamul95/DatePicker1

    In Swift 4 or 5 you can use bellow code

     class ViewController: UIViewController {
    
       @IBOutlet weak var txtDatePicker: UITextField!
      let datePicker = UIDatePicker()
    
      override func viewDidLoad() {
        super.viewDidLoad()
         showDatePicker()
      }
    
    
      func showDatePicker(){
        //Formate Date
        datePicker.datePickerMode = .date
    
       //ToolBar
       let toolbar = UIToolbar();
       toolbar.sizeToFit()
       let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(donedatePicker));
       let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
      let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelDatePicker));
    
     toolbar.setItems([doneButton,spaceButton,cancelButton], animated: false)
    
      txtDatePicker.inputAccessoryView = toolbar
      txtDatePicker.inputView = datePicker
    
     }
    
      @objc func donedatePicker(){
    
       let formatter = DateFormatter()
       formatter.dateFormat = "dd/MM/yyyy"
       txtDatePicker.text = formatter.string(from: datePicker.date)
       self.view.endEditing(true)
     }
    
     @objc func cancelDatePicker(){
        self.view.endEditing(true)
      }
    }
    
  1. ViewController 代码如下。.

      class ViewController: UIViewController {
         //Text Field Connection
       @IBOutlet weak var txtDatePicker: UITextField!
       //Uidate picker
       let datePicker = UIDatePicker()
    
        override func viewDidLoad() {
        super.viewDidLoad()
       //show date picker
         showDatePicker()
      }
    
    
       func showDatePicker(){
       //Formate Date
        datePicker.datePickerMode = .date
    
        //ToolBar
       let toolbar = UIToolbar();
       toolbar.sizeToFit()
    
       //done button & cancel button
        let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.bordered, target: self, action: "donedatePicker")
        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
       let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.bordered, target: self, action: "cancelDatePicker")
       toolbar.setItems([doneButton,spaceButton,cancelButton], animated: false)
    
    // add toolbar to textField
    txtDatePicker.inputAccessoryView = toolbar
     // add datepicker to textField
    txtDatePicker.inputView = datePicker
    
       }
    
     func donedatePicker(){
      //For date formate
       let formatter = DateFormatter()
       formatter.dateFormat = "dd/MM/yyyy"
       txtDatePicker.text = formatter.string(from: datePicker.date)
       //dismiss date picker dialog
       self.view.endEditing(true)
        }
    
          func cancelDatePicker(){
           //cancel button dismiss datepicker dialog
            self.view.endEditing(true)
          }
       }
    
  2. 完整的源项目提供给github。github 链接:https: //github.com/enamul95/DatePicker1

    在 Swift 4 或 5 中,您可以使用以下代码

     class ViewController: UIViewController {
    
       @IBOutlet weak var txtDatePicker: UITextField!
      let datePicker = UIDatePicker()
    
      override func viewDidLoad() {
        super.viewDidLoad()
         showDatePicker()
      }
    
    
      func showDatePicker(){
        //Formate Date
        datePicker.datePickerMode = .date
    
       //ToolBar
       let toolbar = UIToolbar();
       toolbar.sizeToFit()
       let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(donedatePicker));
       let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
      let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelDatePicker));
    
     toolbar.setItems([doneButton,spaceButton,cancelButton], animated: false)
    
      txtDatePicker.inputAccessoryView = toolbar
      txtDatePicker.inputView = datePicker
    
     }
    
      @objc func donedatePicker(){
    
       let formatter = DateFormatter()
       formatter.dateFormat = "dd/MM/yyyy"
       txtDatePicker.text = formatter.string(from: datePicker.date)
       self.view.endEditing(true)
     }
    
     @objc func cancelDatePicker(){
        self.view.endEditing(true)
      }
    }
    

回答by Nirav D

In Swift 3 you can use DateComponentsfor that like this way.

在 Swift 3 中,您可以DateComponents像这样使用它。

First add action on datepickerfor .valueChangedevents.

首先datepicker.valueChanged事件添加操作。

datepicker.addTarget(self, action: #selector(dateChanged(_:)), for: .valueChanged)

Then get selected day, month and year using DateComponentsin the action.

然后DateComponents在操作中使用选定的日、月和年。

func dateChanged(_ sender: UIDatePicker) {
    let components = Calendar.current.dateComponents([.year, .month, .day], from: sender.date)
    if let day = components.day, let month = components.month, let year = components.year {
        print("\(day) \(month) \(year)")
    }
}

回答by Daggarwal

Suppose if you want to show datePicker on tapping textfield and when user select some date from it then it will automatically populate on your textfield .

假设您想在点击 textfield 时显示 datePicker 并且当用户从中选择某个日期时,它将自动填充您的 textfield 。

 @IBOutlet weak var dateTextField: UITextField!
let datePickerView:UIDatePicker = UIDatePicker()
        datePickerView.datePickerMode = UIDatePickerMode.date
        dateTextField.inputView = datePickerView
        datePickerView.addTarget(self, action: #selector(ViewController.datePickerValueChanged), for: UIControlEvents.valueChanged)

// Make a dateFormatter in which format you would like to display the selected date in the textfield.
func datePickerValueChanged(sender:UIDatePicker) {

        let dateFormatter = DateFormatter()

        dateFormatter.dateStyle = DateFormatter.Style.medium

        dateFormatter.timeStyle = DateFormatter.Style.none

        dateTextField.text = dateFormatter.string(from: sender.date)

    }

Here Sender.date which is the instance of UIDatePicker pick up the date from the datepicker and populate on your textfield.

这里 Sender.date 是 UIDatePicker 的实例,从日期选择器中获取日期并填充到您的文本字段中。

回答by vaibhav

Create IBOutletof UIDatePickerand connect it properly then use below code to get day, month, year ect.

创建IBOutletUIDatePicker,并将其连接正确,然后使用下面的代码来获得天,月,年等。

var comp = NSDateComponents()
@IBOutlet weak var datePicker: UIDatePicker!

override func viewDidLoad() {
    super.viewDidLoad()
    datePicker.addTarget(self, action: Selector("datePickerChanged:"), forControlEvents: UIControlEvents.ValueChanged)
}

func datePickerChanged(datePicker:UIDatePicker){
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
    dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
    let cal = NSCalendar.currentCalendar()
    comp = cal.components([.Era, .Day, .Month, .Year, .Hour, .Minute] , fromDate: datePicker.date)

    // getting day, month, year ect
    print ("Era:\(comp.era) Date:\(comp.day) Month:\(comp.month) Month:\(comp.year) Hours: \(comp.hour) Minuts:\(comp.minute)")
}

回答by Hitesh Chauhan

var picker = UIDatePicker()
picker = UIDatePicker()
textField.inputView = picker
picker.addTarget(self, action: #selector(ViewController.handleDatePicker), for: UIControlEvents.valueChanged)
picker.datePickerMode = .date

func handleDatePicker() {
    var dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy"
    textfield.text = dateFormatter.string(from: picker.date)
    textfield.resignFirstResponder()
}

回答by dirtydanee

The problem can be solved in numerous way. If you are looking for a solution only using code:

这个问题可以通过多种方式解决。如果您正在寻找仅使用代码的解决方案:

    class Foo: UIViewController {
        // Lets create your picker - Can be IBOutlet too
        lazy var datePicker: UIDatePicker = {
            let picker = UIDatePicker()
            picker.datePickerMode = .date
            return picker
        }()

    override func viewDidLoad() {
        super.viewDidLoad()
        //Observe the value changes in datePickerValueChanged function for example
        datePicker.addTarget(self, action: #selector(datePickerValueChanged), for: .valueChanged)
    }

    func datePickerValueChanged(sender: UIDatePicker) {
        // Function will be called every time picker changes it's value
        // You can access to it the following way
        print(sender.date)
    }
  }

The other way if you have your UIDatePickerin Interface Builder. You pretty much need to the same thing, like above, but i a slightly different way. Click on your UIDatePickerin Interface Builder:

另一种方式,如果你有你UIDatePicker的界面生成器。你几乎需要同样的事情,就像上面一样,但方式略有不同。UIDatePicker在 Interface Builder 中单击:

enter image description here

在此处输入图片说明

You see the Value Changedoption at the buttom. Now you grab and drag an IBActionto your viewController, and set up your connection like this:

您会看到Value Changed底部的选项。现在你抓住并拖动一个IBAction到你的 viewController,并像这样设置你的连接:

enter image description here

在此处输入图片说明

This way you achive the same as the first example, because you end up with pretty much the same function:

通过这种方式,您可以获得与第一个示例相同的功能,因为您最终获得了几乎相同的功能:

@IBAction func datePickerValueChanged(sender: UIDatePicker) {
    print(sender.date)
}