swiftxcodedatetimepickeruidatepickerpicker

Date/Time Picker in Swift 4


How would I make a Time/Date Picker that allows a selection of minutes and seconds and set that as a countdown time (I only need to know how to make the Time/Date Picker). I've found many tutorials but they are made in the Main.storyboard. I want to add it to my GameScene.swift (file type is Cocoa Touch Class). I am working with Swift 4 in Xcode 9.3 in a Game type application.

Thanks in advance!


Solution

  • You want minutes and seconds picker. So, default UIDatePicker does not provide this functionality. So, I have make custom picker using UIPickerView.

    1) First, write this code in viewDidLoad() method.

        let timePicker: UIPickerView = UIPickerView()
        //assign delegate and datasoursce to its view controller
        timePicker.delegate = self
        timePicker.dataSource = self
    
        // setting properties of the pickerView
        timePicker.frame = CGRect(x: 0, y: 50, width: self.view.frame.width, height: 200)
        timePicker.backgroundColor = .white
    
        // add pickerView to the view
        self.view.addSubview(timePicker)
    

    2) Second, make extension of your viewcontroller and give them UIPickerViewDelegate and UIPickerViewDataSource as I have done below.

    extension ViewController: UIPickerViewDelegate, UIPickerViewDataSource{
    
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 2
        }
    
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return 60
        }
    
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return String(format: "%02d", row)
        }
    
        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            if component == 0{
                let minute = row
                print("minute: \(minute)")
            }else{
                let second = row
                print("second: \(second)")
            }
        }
    }
    

    Hope this will help you.