Multiple PickerViews in one View?

2019-02-04 05:17发布

问题:

I want to create 2 separate pickers in the same view using the same viewController. But how do I set separate delegates and datasource for them?

Can't seem to get it working. They show up with the same data. If you have any sample code on this it will be much appreciated.

Thanks.

回答1:

Note that each method of both the datasource and the delegate protocols contain a UIPickerView * parameter, for instance:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

You need to use it to distinguish between your two instances, as follows:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{

    if([pickerView isEqual: pickerOne]){
      // return the appropriate number of components, for instance
         return 3;
    }

    if([pickerView isEqual: pickerTwo]){
      // return the appropriate number of components, for instance
         return 4;
    }
}


回答2:

The most straight forward way to do this is to use the tag property of the pickerView. I usually define these in the header for readability. You can set the tag in Interface Builder or in code.

#define kPickerOne 0
#define kPickerTwo 1

Then in your implementation file...

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{
     if(pickerView.tag == kPickerOne)
     {
          // do something with picker one
     }
     else if(pickerView.tag == kPickerTwo)
     {
          // the other picker
     }
}