Quantcast
Channel: Active questions tagged uipickerview - Stack Overflow
Viewing all articles
Browse latest Browse all 592

How to prevent the selection of invalid dates in UIPicker view in swift?

$
0
0

I am using the UIPicker view for showing the Day, date and time as per the below screenshot:Desired Output

I have implemented this by using the following code:

import UIKitclass ViewController: UIViewController, UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource {   @IBOutlet weak var txtDatePicker: UITextField!      @IBOutlet var dateLabel:UILabel!      let datePicker = UIPickerView()    var pickerDaysYear = [["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"],["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],["1AM", "2AM", "3AM", "4AM", "5AM", "6AM", "7AM", "8AM", "9AM", "10AM", "11AM", "12AM","1PM", "2PM", "3PM", "4PM", "5PM", "6PM", "7PM", "8PM", "9PM", "10PM", "11PM", "12PM",]];  override func viewDidLoad() {          super.viewDidLoad()          self.txtDatePicker.delegate = self          self.datePicker.dataSource = self          self.datePicker.delegate = self          self.txtDatePicker.inputView = self.datePicker          let toolBar = UIToolbar()          toolBar.barStyle = UIBarStyle.default          toolBar.isTranslucent = true          toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)          toolBar.sizeToFit()    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.plain, target: self, action: #selector(self.doneButtonTapped))          toolBar.setItems([doneButton], animated: false)          self.txtDatePicker.inputAccessoryView = toolBar  }    @objc func doneButtonTapped(){          self.txtDatePicker.resignFirstResponder()      }      override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {          view.endEditing(true)      }      override func didReceiveMemoryWarning() {          super.didReceiveMemoryWarning()          // Dispose of any resources that can be recreated.      }//----------------   PickerView  delegate Method   --------------------------------//func numberOfComponents(in pickerView: UIPickerView) -> Int {    return 3}func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {    return self.pickerDaysYear[component].count}func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {    return self.pickerDaysYear[component][row]}func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {    let days =  pickerDaysYear[0][pickerView.selectedRow(inComponent: 0)]    let month = pickerDaysYear[1][pickerView.selectedRow(inComponent: 1)]    let time = pickerDaysYear[2][pickerView.selectedRow(inComponent: 2)]    txtDatePicker.text =   days +" " + month +" " + time}}

I have achieved the desired output but the problem is i can still select invalid dates like "30 February" "31 April" etc ... So is there any way to prevent such invalid dates by being selected??.Right now the output is like :

invalid date selection


Viewing all articles
Browse latest Browse all 592

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>