iOS Swift 3 - UIDatePicker

iOS Swift 3 - UIDatePicker

问题描述:

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

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

+0

你qurestion不明确 –

+0

可以显示乌尔试图代码 –

+0

你想从选择器中选定的日期? – Rajat

在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)") 
    } 
} 

创建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)") 
} 
+0

OP在Swift 3中提出要求,因此连击器使用'DateComponents'而不是'NSDateComponents'和'Calendar'而不是'NSCalendar'。 –

+1

@NiravD这是一个版本的差异,无论如何欣赏你的贡献+你的一个也:) – vaibhav

+0

@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

enter image description here

你看在BUTTOM的Value Changed选项。现在你抓住并拖动IBAction您的viewController,并设置您的连接是这样的:

enter image description here

这样你achive一样的第一个例子,因为你最终得到几乎相同的功能:

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

感谢您展示如何通过代码完成此操作 –

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可以使用

  1. 创建快捷3
  2. 将单查看应用程序的简单项目的文本字段&连接的viewController
  3. 日期选择器看起来就像图像

enter image description here

  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

    在斯威夫特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) 
        } 
    }