views:

955

answers:

2

Hi PPL.

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.

+3  A: 

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; }

}

unforgiven
this works great, thanks.. only problem is I get a warning saying "warning - control reaching end of non void function" do you know why?
CC
ahh.. Okay, it was because it could end up returning nothing, so added the else { return 0; } and the error disappeared... Thanks again to both of you..Great helt :D
CC
+2  A: 

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
     }
}
Jab