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
iOS Swift 3 - UIDatePicker
提问by Anthony Shahine
I have a UIDatePicker
that 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 UIDatePicker
using 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 中你可以使用
- Create Simple Project of Single View Application in swift 3
- Drag a text field & connect to viewController
- Date picker look like image
- 在 swift 3 中创建单视图应用程序的简单项目
- 拖动文本字段并连接到 viewController
- 日期选择器看起来像图像
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) } }
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) } }
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) } }
完整的源项目提供给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 DateComponents
for that like this way.
在 Swift 3 中,您可以DateComponents
像这样使用它。
First add action on datepicker
for .valueChanged
events.
首先datepicker
为.valueChanged
事件添加操作。
datepicker.addTarget(self, action: #selector(dateChanged(_:)), for: .valueChanged)
Then get selected day, month and year using DateComponents
in 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 IBOutlet
of UIDatePicker
and connect it properly then use below code to get day, month, year ect.
创建IBOutlet
的UIDatePicker
,并将其连接正确,然后使用下面的代码来获得天,月,年等。
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 UIDatePicker
in Interface Builder. You pretty much need to the same thing, like above, but i a slightly different way. Click on your UIDatePicker
in Interface Builder:
另一种方式,如果你有你UIDatePicker
的界面生成器。你几乎需要同样的事情,就像上面一样,但方式略有不同。UIDatePicker
在 Interface Builder 中单击:
You see the Value Changed
option at the buttom. Now you grab and drag an IBAction
to your viewController, and set up your connection like this:
您会看到Value Changed
底部的选项。现在你抓住并拖动一个IBAction
到你的 viewController,并像这样设置你的连接:
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)
}