iOS Swift 3 - UIDatePicker
我有一个UIDatePicker
显示日期,月份和年份。但我不知道如何获取这些参数。iOS Swift 3 - UIDatePicker
那么使用Swift 3从UIDatePicker
获得日,月和年的最佳方法是什么?
在Swift 3中,您可以像这样使用DateComponents
。
对于.valueChanged
事件,首先在datepicker
上添加操作。
datepicker.addTarget(self, action: #selector(dateChanged(_:)), for: .valueChanged)
然后得到的动作使用DateComponents
选择日,月,年。
func dateChanged(_ sender: UIDatePicker) {
let componenets = Calendar.current.dateComponents([.year, .month, .day], from: sender.date)
if let day = componenets.day, let month = componenets.month, let year = componenets.year {
print("\(day) \(month) \(year)")
}
}
创建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)")
}
OP在Swift 3中提出要求,因此连击器使用'DateComponents'而不是'NSDateComponents'和'Calendar'而不是'NSCalendar'。 –
@NiravD这是一个版本的差异,无论如何欣赏你的贡献+你的一个也:) – vaibhav
@vaibhav从'viewDidLoad'不调用'super'是一个严重的错误。 – dirtydanee
,如果你想显示在文本框敲击,当用户选择它的一些日期,那么它会在你的文本框自动填充日期选择器假设。
@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)
}
这里的Sender.date是UIDatePicker的实例从datepicker中选取日期并填充到文本字段上。
该问题可以通过多种方式解决。如果你正在寻找一个解决方案只使用代码:
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)
}
}
的另一种方式,如果你有在Interface Builder您UIDatePicker
。你几乎需要同样的东西,就像上面一样,但我的方式稍有不同。在Interface Builder中点击你UIDatePicker
:
你看在BUTTOM的Value Changed
选项。现在你抓住并拖动IBAction
您的viewController,并设置您的连接是这样的:
这样你achive一样的第一个例子,因为你最终得到几乎相同的功能:
@IBAction func datePickerValueChanged(sender: UIDatePicker) {
print(sender.date)
}
感谢您展示如何通过代码完成此操作 –
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()
}
的UIDatePicker在夫特3和4斯威夫特例子。
在斯威夫特3可以使用
- 创建快捷3
- 将单查看应用程序的简单项目的文本字段&连接的viewController
- 日期选择器看起来就像图像
-
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
在斯威夫特4您可以使用波纹管代码
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) } }
你qurestion不明确 –
可以显示乌尔试图代码 –
你想从选择器中选定的日期? – Rajat