web-dev-qa-db-fra.com

iOS Swift 3 - UIDatePicker

J'ai un UIDatePicker qui indique le jour, le mois et l'année. Mais je ne sais pas comment obtenir ces paramètres.

Alors, quel est le meilleur moyen d’obtenir le jour, le mois et l’année de UIDatePicker en utilisant Swift 3?

19
Anthony Shahine

Dans Swift 3, vous pouvez utiliser DateComponents comme cela.

Premièrement, ajoutez une action sur datepicker pour .valueChanged événements.

datepicker.addTarget(self, action: #selector(dateChanged(_:)), for: .valueChanged)

Puis obtenez le jour, le mois et l’année sélectionnés en utilisant DateComponents dans l’action.

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)")
    }
}
40
Nirav D

UIDatePicker dans Swift 3 et Swift 4 exemple.).

In Swift 3 vous pouvez utiliser

  1. Créer un projet simple d’application à vue unique dans Swift 3
  2. Faites glisser un champ de texte et connectez-vous à viewController
  3. Le sélecteur de date ressemble à l'image

enter image description here

  1. Le code ViewController est présenté ci-dessous. .

      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. Le projet Full Source est donné à github. Lien github: https://github.com/enamul95/DatePicker1

    Dans Swift 4, vous pouvez utiliser le code ci-dessous

     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)
      }
    }
    
51
Enamul Haque

Supposons que si vous souhaitez afficher datePicker en tapant sur le champ de texte et que l'utilisateur sélectionne une date, il se remplit automatiquement sur votre champ de texte.

 @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)

    }

Ici, Sender.date, qui est l’instance de UIDatePicker, prend la date dans le sélecteur de date et la remplit dans votre champ de texte.

13
Daggarwal

Créez IBOutlet sur UIDatePicker et connectez-le correctement, puis utilisez le code ci-dessous pour obtenir le jour, le mois, l'année, etc.

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)")
}
4
vaibhav
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()
}
3
Hitesh Chauhan

Le problème peut être résolu de nombreuses manières. Si vous recherchez une solution utilisant uniquement du 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)
    }
  }

L'autre façon si vous avez votre UIDatePicker dans Interface Builder. Vous avez quasiment besoin de la même chose, comme ci-dessus, mais d’une manière légèrement différente. Cliquez sur votre UIDatePicker dans Interface Builder:

enter image description here

Vous voyez le Value Changed option au bout. Maintenant, prenez et faites glisser un IBAction vers votre viewController, puis configurez votre connexion de la manière suivante:

enter image description here

De cette façon, vous obtenez le même résultat que dans le premier exemple, car vous obtenez pratiquement la même fonction:

@IBAction func datePickerValueChanged(sender: UIDatePicker) {
    print(sender.date)
}
2
dirtydanee