如何在视图控制器中为子类选取器视图实现 selectedrow

Posted

技术标签:

【中文标题】如何在视图控制器中为子类选取器视图实现 selectedrow【英文标题】:how to implement selectedrow in viewcontroller for subclassed pickerview 【发布时间】:2015-01-11 09:03:52 【问题描述】:

我的故事板上有两个 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 关联的 IBAction。上面的方法将在我的子类中调用(这是它自己的委托),我不知道如何将此操作返回到我的主视图控制器

所以我的问题是有什么方法可以在子类中获取“didSelectRow”来触发我的主 ViewController 中的操作?

【问题讨论】:

【参考方案1】:

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

    将 UIPickerViewDelegate 协议添加到您的 UIViewController

    在那里实现 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 (weak, nonatomic) IBOutlet id deligoat;

    将您的 viewController 连接到两个选择器,无论是在 IB 中还是在代码中。

    传下去..

    //在pickerView子类中

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

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

【讨论】:

以上是关于如何在视图控制器中为子类选取器视图实现 selectedrow的主要内容,如果未能解决你的问题,请参考以下文章

如何根据在选取器视图中选择的行组件更新表视图数据

具有多个文本字段输入视图的多个选取器视图 Swift

如何在表格视图中调用选取器视图内容?

如何在同一视图中使用具有不同数据源的多个选取器视图?

IBDesignable UIViewController

如何在 iPhone 上放大选取器视图?