如何将两个不同的DataSource分配给两个UIPickerView?

时间:2014-01-16 19:52:55

标签: ios ios7 uipickerview

我发现了很多这方面的问题,但是所有提议的解决方案似乎都在委托方法中区分选择picker1或picker2。

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    NSArray *values = ( pickerView == picker1 ? values1 : values2 );
    return [values count];
}

然而,似乎有一个解决方案,你可以在一个单独的文件中分配两个不同的数据源来实现这一点,而不必像上面描述的solution b)那样区分两个选择器。

现在有点令人困惑。假设我有一个ViewController,我将这两个选择器设置为View的FileOwner。现在,如果我创建两个符合<UIPickerViewDataSource><UIPickerViewDelegate>的独立接口,如何将视图中的拾取器绑定到这两个接口?当然,我可以将它们导入我的ViewController(FileOwner)。但那又怎样?

2 个答案:

答案 0 :(得分:0)

假设您正在xib / storyboard中创建视图,最简单的方法是为两个视图设置出口,并在视图控制器的viewDidLoad方法中设置数据源/委托。

-(void)viewDidLoad
{
    self.myDataSource1 = [[MyDataSource1 alloc] init];
    self.myDataSource2 = [[MyDatasource2 alloc] init];

    self.pickerOne.delegate = self.myDataSource1;
    self.pickerOne.dataSource = self.myDataSource1;
    self.pickerTwo.delegate = self.myDataSource2;
    self.pickerTwo.dataSource = self.myDataSource2;
}

... MyDataSource1和MyDataSource 2是你创建的代表作为代表的类。

答案 1 :(得分:0)

让我们说MyClass符合选择器数据源和委托方法 它也有以下公共财产。

@property NSInteger rows;
@property NSArray *data;
.... others properties that you set which you will return in delegate methods.

现在在你的视图中控制器,

MyClass *delegate1 = [MyClass alloc] init]
delegate1.rows = numberOfRowsInPicker1;
delegate1.data = picker1Data;
// set other public properties of delegate1
picker1.delegate=delegate1;
picker1.datasource=delegate1;

类似委托2作为picker2的委托。