I dealt with this problem and learned from one PickerView to do two “columns” through func numberOfComponents(in pickerView: UIPickerView) -> Int and [[],[]] (who understands, understands), but I would like to know how to program individual PickerView within one class (any possible quantity, with the ability to change other PickerView depending on the Raw selected first).

Could you give us some code?

2 answers 2

The easiest way to do this:

 var picker1 : UIPickerView var picker2 : UIPickerView func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { if (pickerView == picker1) { return picker1Data.count } if (pickerView == picker2) { return picker2Data.count } return 0 } func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if (pickerView == picker1) { return picker1Data[component].count } if (pickerView == picker2) { return picker2Data[component].count } return 0 } func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView { var l : UILabel! if (pickerView == picker1) { l.text = picker1Data[component][row] } if (pickerView == picker2) { l.text = picker2Data[component][row] } return l } 
  • in func pickerView (pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int. The count method inside if does not want to work .... - Igor Zexyy
  • I tried to create a second class inside UIViewController To describe the second PickerView -> class picker: UIPickerView Delegate, UIPickerViewDataSource, but the error would be: Type 'ViewController.picker' does not conform to protocol 'NSObjectProtocol' (((((((((( (((( - Igor Zexyy
 class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { @IBOutlet weak var picker1: UIPickerView! @IBOutlet weak var picker2: UIPickerView! var data1 = ["tra","tra","tra","tra"] var data2 = ["la","la","la","la"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. picker1.delegate = self picker1.dataSource = self picker2.delegate = self picker2.dataSource = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if pickerView == picker1 { return data1[row]} if pickerView == picker2 {return data2[row]} return "" } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if pickerView == picker1 {return data1.count} if pickerView == picker2 {return data2.count} return 0 } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } } 
  • I figured it out myself. Works. - Igor Zexyy