Search code examples
iphoneiosdatasetuipickerviewuipicker

Multiple UIPickerViews


I have a dilemma, I have two UIPickerViews which "show" when two distinct views load. I started with one UIPickerView and was able to get that up and running by loading the array and all the other UIPickerView actions within the ViewController.

I thought it would be as simple as copy/pasting the same methods for the new UIPickerView, but just changing the variable names, also within the same UIViewController.

Problem is - both UIPickerView are showing the same data set in the drop down ? Am I simply missing something obvious here?

Updated below

I did that for all four methods below and now that app crashes once the “next” view is loaded? Does this look right?

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView 

- (NSInteger)thePickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component

- (NSString *)thePickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

- (void)thePickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

Solution

  • Yeah you are, you have to use the UIPickerView argument to determine WHICH picker view is actually asking for data - since you have set both pickers to the same data source.

    -(void)numberOfComponentInPickerView:(UIPickerView*)thePickerView {
        if(thePickerView == firstPickerView) {
           // return number of components in first picker    
        } else if(thePickerView == secondPickerView) {    
           // return number of components in second picker    
        } else {
           assert(NO);
        }
    }
    
    // repeat for all other delegate / datasource methods