2014-01-16 34 views
1

我发现了很多关于这个问题的问题,但是所有提出的解决方案似乎都在代表方法中挑选picker1或picker2。如何将两个不同的DataSources分配给两个UIPickerView?

- (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)中。但那又如何?

回答

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是您创建的充当委托的类。

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; 

类似delegate2作为委托picker2。

相关问题