我似乎无法找到一个外部类管理ViewController中的视图的连接.我是iOS的新手,并且花了很多时间寻找解决方案.简单示例:
UIPickerView的子类
我创建了一个文件,它是UIPickerView的子类,并使其符合PickerView委托和数据源.
class MyPickerView: UIPickerView, UIPickerViewDelegate, UIPickerViewDataSource {
//In here I conform to all the required methods...no problems there
}
Run Code Online (Sandbox Code Playgroud)
主视图控制器,带PletView的插座
在我的MainViewController中,我为我的选择器视图创建了一个插座.另外,在StoryBoard中,我将我的Picker View的"自定义类"连接到上面的MyPickerView.
class MainViewController: UIViewController {
@IBOutlet weak var myPickerView: UIPickerView!
override func viewDidLoad() {
//how do I hookup my picker view class
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
如何告诉我的MainViewController我的子类"MyPickerView"正在管理它的选择器视图?
我如何在子类和视图控制器之间启用通信?
---------------------
更新:最终解决方案纳入@ Oscar的答案
@ Oscar的建议很棒.为了澄清,我希望我的PickerView子类是UIPickerView Delegate,因为Picker将始终具有相同的UI,并且有许多用于UI的PickerView委托方法.(attributionTitleForRow,widthForComponent,rowHeightForComponent等)我不想在每个使用此PickerView的ViewController中调用这些委托方法.
现在,当调用PickerView"didSelectRow"时,我们需要通知我们的ViewController并传递所选的值.为了实现这一点,我使用了一个协议.(总结如下)这个主题花了我一些时间来学习,但是至关重要,所以如果这没有意义,我建议花时间与Protocols&Delegation合作.
在PickerView中创建一个带有func的协议,该func将用于与呈现此PickerView的ViewControllers通信:
protocol MyPickerViewProtocol {
func myPickerDidSelectRow(selectedRowValue:Int?)
}
Run Code Online (Sandbox Code Playgroud)在呈现PickerView的ViewController中,符合您的PickerView协议.通过这样做,您必须将func myPickerDidSelectRow放在ViewController中的某个位置:
class MyViewController: MyPickerViewProtocol {
func myPickerDidSelectRow(selectedRowValue:Int?) {
//do stuff to update your ViewController
} …Run Code Online (Sandbox Code Playgroud)