我有一個UIDatePicker
顯示日期,月份和年份。但我不知道如何獲取這些參數。iOS Swift 3 - UIDatePicker
那麼使用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可以使用
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