moosgrn
moosgrn

Reputation: 379

Set Time Default in UIDatePicker

I'm trying to populate a pickerView with a default value (String). Currently I'm able to capture it's value as a time after the user interacts with it, however I'm not able to set the time value before it becomes visible to the user.

I've tried

let test = dateFormatter.date(from: "09:00 AM")
timePicker.setDate(test, animated: false)

however that errors "Value of type '(UIDatePicker) -> ()' has no member 'setDate'"

    @IBOutlet weak var timePicker: UIDatePicker!
    @IBAction func timePicker(_ sender: UIDatePicker) {
      let dateFormatter = DateFormatter()
      dateFormatter.dateFormat = "hh:mm a"

      //my attempt at passing in a string
      let test = dateFormatter.date(from: "09:00 AM")
      timePicker.setDate(test, animated: false)

      tempTime = (dateFormatter.string(from: sender.date))//successfully captures the user's input value
}

Here's the function that launches the xib (containing the timePicker)

    func showSomeDialogue() {
       let newVC = SomeViewContoller(nibName: "SomeViewController", bundle: nil)
       let popup = PopupDialog(viewController: newVC,
                               buttonAlignment: .horizontal,
                               transitionStyle: .bounceUp,
                               tapGestureDismissal: true,
                               panGestureDismissal: false)

       present(popup, animated: true, completion: nil)
        newVC.someDelegate = self as SomeDelegate
   }

The xib's class

import UIKit

protocol MealDelegate {
  func didCreateMeal(mealTime: String)
}

class SomeViewContoller: UIViewController {

 var someDelegate: SomeDelegate!
 var tempTime = ""

 @IBOutlet weak var timePicker: UIDatePicker!
 @IBAction func timePicker(_ sender: UIDatePicker) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "hh:mm a"
    tempTime = (dateFormatter.string(from: sender.date))
 }

 @IBAction func someSaveBtn(_ sender: UIButton) {
    mealDelegate.didCreateMeal(mealTime: tempTime)
    self.dismiss(animated: true, completion: nil)
 }
}

Upvotes: 0

Views: 333

Answers (3)

Ronak Patel
Ronak Patel

Reputation: 629

Try this,

 @IBAction func timePicker(_ sender: UITextField) {
        let datePickerView = UIDatePicker()
                datePickerView.datePickerMode = .dateAndTime

                sender.inputView = datePickerView
                datePickerView.addTarget(self, action: #selector(handleTimePicker(sender:)), for: .valueChanged)
    }
    @objc func handleTimePicker(sender: UIDatePicker) {

           let dateFormatter = DateFormatter()
           dateFormatter.dateFormat = "HH:mm "
               tempTime = dateFormatter.string(from: sender.date)
       // view.endEditing(true)
       }

Upvotes: 0

Kishan Bhatiya
Kishan Bhatiya

Reputation: 2368

Add following to your view controller class:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm a"

let date = dateFormatter.date(from: "09:00 AM")
timePicker.date = date

Upvotes: 2

lajosdeme
lajosdeme

Reputation: 2407

Add the following to your SomeViewController class:

//MARK: - View Did Load
override func viewDidLoad() {
    super.viewDidLoad()

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "hh:mm a"
    let date = dateFormatter.date(from: "10:57 PM")
    //or whatever date you want to display as default
    timePicker.setDate(date, animated: true)
}

Upvotes: 0

Related Questions