【问题标题】:How to assign two different DataSources to two UIPickerView?如何将两个不同的数据源分配给两个 UIPickerView?
【发布时间】:2014-01-16 19:52:54
【问题描述】:

我发现了很多与此相关的问题,但是所有提议的解决方案似乎都可以在选择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)。但是然后呢?

【问题讨论】:

    标签: ios ios7 uipickerview


    【解决方案1】:

    假设您在 xib/storyboard 中创建视图,最简单的做法是为两个视图设置 outlet,并在视图控制器的 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 是您创建的用作委托的类。

    【讨论】:

      【解决方案2】:

      假设 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 的代理类似。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-05
        • 1970-01-01
        • 1970-01-01
        • 2014-10-14
        • 2021-11-02
        • 1970-01-01
        相关资源
        最近更新 更多