Multiple columns in "UIPickerView"

Days and month added in my project How to add two fields to (date and time) UIPickerView. In my code

class TableViewController: UITableViewController ,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource{
    @available(iOS 2.0, *)
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
@IBOutlet var dateTextfield:UITextField!
    @IBOutlet var dateLabel:UILabel!
 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"]];

override func viewDidLoad() {
        super.viewDidLoad()
self.pickerview.delegate = self

}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 2
    }
    numberOfRowsInComponent component: Int) -> Int {
           return self.pickerDaysYear[component].count
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if(component == 0)
        {
            return self.pickerDaysYear[component][row]
        }
        else
        {
            return self.pickerDaysYear[component][row]
        }

//        return 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)]
        dateTextfield.text = days + " " + month
    }
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.endEditing(false)
    }

      

Output:

[no image]

And I was expecting this output:

enter image description here

+3


source to share


2 answers


class TableViewController: UITableViewController ,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource{

@IBOutlet var dateTextfield:UITextField!
    @IBOutlet var dateLabel:UILabel!
    let datePicker = UIPickerView()
override func viewDidLoad() {
        super.viewDidLoad()
        self.dateTextfield.delegate = self

        self.datePicker.dataSource = self
        self.datePicker.delegate = self

        self.dateTextfield.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: UIBarButtonItemStyle.plain, target: self, action: #selector(self.doneButtonTapped))
        toolBar.setItems([doneButton], animated: false)
        self.dateTextfield.inputAccessoryView = toolBar
}
func doneButtonTapped(){
        self.dateTextfield.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 2
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return self.pickerDaysmonth[component].count
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return self.pickerDaysmonth[component][row]
    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        let days =  pickerDaysmonth[0][pickerView.selectedRow(inComponent: 0)]
        let month = pickerDaysmonth[1][pickerView.selectedRow(inComponent: 1)]
        dateTextfield.text =   days + " " + month

    }

      

Assign inputview to textbox in UIPickerView ()

let datePicker = UIPickerView()

self.dateTextfield.inputView = self.datePicker

      

Assign inputAccessoryView to textbox in toolBar



let toolBar = UIToolbar()
    self.dateTextfield.inputAccessoryView = toolBar

      

It works fine

Current output:

enter image description here

0


source


Function numberOfComponents

and numberOfRowsInComponent

refer to the data source, not the delegate.

So, you need to add this line to your viewDidLoad

:



self.pickerview.delegate = self

+1


source







All Articles