2016-11-08 171 views
4

我有一個UIDatePicker顯示日期,月份和年份。但我不知道如何獲取這些參數。iOS Swift 3 - UIDatePicker

那麼使用Swift 3從UIDatePicker獲得日,月和年的最佳方法是什麼?

+0

你qurestion不明確 –

+0

可以顯示烏爾試圖代碼 –

+0

你想從選擇器中選定的日期? – Rajat

回答

17

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

創建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

7

,如果你想顯示在文本框敲擊,當用戶選擇它的一些日期,那麼它會在你的文本框自動填充日期選擇器假設。

@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中選取日期並填充到文本字段上。

1

該問題可以通過多種方式解決。如果你正在尋找一個解決方案只使用代碼:

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

感謝您展示如何通過代碼完成此操作 –

1
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() 
} 
11

的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) 
        } 
    }