如何在视图控制器中为子类化的pickerview实现选定的行

时间:2015-01-11 09:03:52

标签: ios objective-c uiviewcontroller delegates uipickerview

我的故事板上有两个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中触发一个动作?

1 个答案:

答案 0 :(得分:0)

你可以编写一个协议,但是因为UIKit中有一个你想要的确切方法,在我看来,阻力最小的路径就是这个......

  1. 将UIPickerViewDelegate协议添加到您的UIViewController
  2. 在那里实施didSelectRow

    //

     -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    
        if (pickerView == self.pv1){
    
           //respond to PV1..
    
        }else{
    
           //respond to PV2..
    
        }
        }
    
  3. 在你的两个pickerView子类中添加第二个委托属性(在标题中,以便UIViewController可以使用setter ..)

    @property(弱,非原子)IBOutlet id< UIPickerViewDelegate> deligoat;

  4. 将你的viewController挂钩到两个选择器,无论是IB还是代码......

  5. 传递它..

    //在pickerView子类

    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    [self.deligoat pickerView:pickerView didSelectRow:row inComponent:component]; }