ios - How to pass values out of reusable PickerView.xib in swift -
i created 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 can initialize uipickerview
setting class of uiview
pickerview
:
and add data uipickerview
, create outlet
, add data via outlet. so, viewcontroller.swift file looks this:
viewcontroller.swift:
class viewcontroller: uiviewcontroller { @iboutlet weak var pickerview: pickerview! override func viewdidload() { super.viewdidload() self.pickerview.labels = ["label1","label2","label3"] } }
here's question: how can pass didselectrow
value out of picker use in viewcontroller.swift?
create custom protocol
protocol mypickerdelegate: nsobjectprotocol { func didselectsomething(some: string) }
create instance inside pickerview.swift like
weak var mydelegate: mypickerdelegate?
then in viewdidload
self.pickerview.mydelegate = self
then make uiviewcontroller
conform protocol
extension viewcontroller: mypickerdelegate { func didselectsomething(some: string) { // self.dostuff() } }
then inside pickerview.swift call didselectrow
, inside it
self.mydelegate?.didselectsomething(some: "somevalue")
Comments
Post a Comment