我的故事板上有两个UIPickerViews,每个子类都是子类,并充当自己的数据源和委托。在我的子类中,我定义行数和列数,并显示每个行的值/标签。
我的主ViewController中有两个出口:
@property (weak, nonatomic) IBOutlet PickerView1 *pv1;
@property (weak, nonatomic) IBOutlet PickerView2 *pv2;
我想使用委托方法
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
触发主视图信息的更新。但问题是主ViewController不是任何一个委托(而且无论如何都不能同时代表两者),并且我没有看到与UIPickerView相关的IBActions。上面的方法将在我的子类(它是自己的委托)中调用,我不知道如何将此操作返回到我的主视图控制器
所以我的问题是有没有办法让子类中的“didSelectRow”在我的主ViewController中触发一个动作?
答案 0 :(得分:0)
你可以编写一个协议,但是因为UIKit中有一个你想要的确切方法,在我看来,阻力最小的路径就是这个......
在那里实施didSelectRow
//
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
if (pickerView == self.pv1){
//respond to PV1..
}else{
//respond to PV2..
}
}
在你的两个pickerView子类中添加第二个委托属性(在标题中,以便UIViewController可以使用setter ..)
@property(弱,非原子)IBOutlet id< UIPickerViewDelegate> deligoat;
将你的viewController挂钩到两个选择器,无论是IB还是代码......
传递它..
//在pickerView子类
中- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
[self.deligoat pickerView:pickerView didSelectRow:row inComponent:component]; }