2017-03-28 55 views
2

我創建了一個可重複使用的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中?

回答

2

創建自定義的協議

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")