Search code examples
swiftdatepickerdatetimepickeruidatepicker

Hide past date and time from date picker swift


i'm trying to hide date picker past date. but i m not able to hide. is there any way to hide past date and time. I was able to disable the past date when i have set to minimum date. So is there any way to hide the past date from date picker.

Screen Shot


Solution

  • var dateCollection = [Date]()
    
    func selectedDate()->Int{
        dateCollection = buildDateCollection()
        var row = 0
        for index in dateCollection.indices{
        let today = Date()
        if Calendar.current.compare(today, to: dateCollection[index], toGranularity: .day) == .orderedSame{
    row = index
            }
        }
        return row
    }
    
    func buildDateCollection()-> [Date]{
       dateCollection.append(contentsOf: Date.nextYear())
       return dateCollection
    }
    
    func formatDatePicker(date: Date) -> String{
        formatter.dateFormat = DATE_PICKER_FORMAT_CUSTOM
        return formatter.string(from: date)
    }
    
    func formatDate(date: Date) -> String{
        formatter.dateFormat = SECURIY_CONC_CLIENT_FORMAT_PNDING
        return formatter.string(from: date)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()        
        let _ = selectedDate()
    }
    
    func setPickerView() {
        picker.tag = tag
        picker.delegate = self
        txtField_Date.dataSource = self
        txtField_Date.inputView = picker
    }
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
         return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return dateCollection.count
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return formatDatePicker(date: dateCollection[row])
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
         txtField_Date.text = formatDate(date: self.dateCollection[row])
    }
    

    Output Screen Shot:

    Screen Shot