web-dev-qa-db-ja.com

iOS Swift 3-UIDatePicker

日、月、年を示すUIDatePickerがあります。しかし、これらのパラメーターを取得する方法がわかりません。

Swift 3を使用してUIDatePickerから日、月、年を取得する最良の方法は何ですか?

19
Anthony Shahine

Swift 3では、このようにDateComponentsを使用できます。

最初に.valueChangedイベントのdatepickerにアクションを追加します。

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

次に、アクションでDateComponentsを使用して、選択した日、月、年を取得します。

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

Swift 3およびSwift 4の例のUIDatePicker。

In Swift 3使用できます

  1. Swift 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

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

あなたがテキストフィールドをタップするときにdatePickerを表示したい場合、ユーザーがそこから日付を選択すると、テキストフィールドに自動的に入力されると仮定します。

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

    }

ここで、UIDatePickerのインスタンスであるSender.dateは、datepickerから日付を取得し、テキストフィールドに入力します。

13
Daggarwal

IBOutlet of 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)")
}
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

この問題はさまざまな方法で解決できます。コードのみを使用するソリューションを探している場合:

    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

下部にValue Changedオプションが表示されます。次に、IBActionをつかんでviewControllerにドラッグし、次のように接続を設定します。

enter image description here

この方法では、最初の例と同じ結果になります。ほとんど同じ機能になるためです。

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