I created a reusable UIPickerView:
PickerView.swift:
class PickerView: UIView, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var pickerView: UIPickerView!
var labels: [String] = [] {
didSet {
self.pickerView.reloadAllComponents()
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
Bundle.main.loadNibNamed("PickerView", owner: self, options: nil)
self.addSubview(pickerView)
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return labels.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return labels[row]
}
}
This code makes it so that I can initialize a UIPickerView just by setting the class of a UIView to PickerView:
And to add data to the UIPickerView, I just create an outlet and add data via the outlet. So, my ViewController.swift file looks like this:
ViewController.swift:
class ViewController: UIViewController {
@IBOutlet weak var pickerView: PickerView!
override func viewDidLoad() {
super.viewDidLoad()
self.pickerView.labels = ["Label1","Label2","Label3"]
}
}
Here's my question: How can I pass the didSelectRow value out of the picker to use in ViewController.swift?


create custom protocol
create instance inside PickerView.swift like
then in
viewDidLoadthen make your
UIViewControllerconform protocolthen inside PickerView.swift call
didSelectRowand inside it