如何通过值出可重复使用的PickerView.xib的迅速
问题描述:
我创建了一个可重复使用的UIPickerView
:如何通过值出可重复使用的PickerView.xib的迅速
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]
}
}
此代码,以便我可以通过将UIView
的类别设置为PickerView
来初始化UIPickerView
:
而且将数据添加到UIPickerView
,我只是创建一个outlet
,并通过出口增加的数据。所以,我ViewController.swift文件看起来像这样:
ViewController.swift:
class ViewController: UIViewController {
@IBOutlet weak var pickerView: PickerView!
override func viewDidLoad() {
super.viewDidLoad()
self.pickerView.labels = ["Label1","Label2","Label3"]
}
}
我的问题是:我怎样才能通过didSelectRow
值了选择器的使用在ViewController.swift中?
答
创建自定义的协议
protocol MyPickerDelegate: NSObjectProtocol {
func didSelectSomething(some: String)
}
创建实例里面PickerView.swift像
weak var myDelegate: MyPickerDelegate?
然后在viewDidLoad
self.pickerView.myDelegate = self
然后进行UIViewController
符合协议
extension ViewController: MyPickerDelegate {
func didSelectSomething(some: String) {
// self.doStuff()
}
}
然后里面PickerView.swift呼叫didSelectRow
和里面
self.myDelegate?.didSelectSomething(some: "SomeValue")