Search code examples
swiftuidatepicker

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

Solution

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