如何通过值出可重复使用的PickerView.xib的迅速

问题描述:

我创建了一个可重复使用的UIPickerView如何通过值出可重复使用的PickerView.xib的迅速

enter image description here

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

enter image description here

而且将数据添加到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")