Search code examples
iosswiftuipickerview

How can i have multiple data arrays for uipickerviews?


What I am trying to accomplish: I have 5 different UITextfields. I want the user to be able to fill in these fields using UIPickerviews. Also i want each of the pickerviews to have a different ranges and/or types of values to choose from for each text field.

I've tried doing this using multiple pickerviews with different arrays for each textfield using switch statements. However I don't feel that this is the most efficient way to go about implementing this. Could someone shed some light on the best practises in implementing different data arrays for pickerviews?


Solution

  • You can achieve what you are doing with help of just one PickerView with the following code

    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
        return 1;
    }
    
    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    {
        switch (pickerSelected) {
    
            case LANGUAGE:
                return [languageArray count];
                break;
            case GENDER:
                return [genderArray count];
                break;
            case COUNTRY:
                return [countryArray count];
                break;
            case CITY:
                return [cityArray count];
                break;
    
            default:
                return 0;
                break;
        }
    
        return 0;
    }
    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
    {
        switch (pickerSelected) {
    
            case LANGUAGE:
                return [languageArray objectAtIndex:row];
                break;
            case GENDER:
                return [genderArray objectAtIndex:row];
                break;
    
            case COUNTRY:
                return [[countryArray objectAtIndex:row] countryName];
                break;
    
            case CITY:
                return [cityArray objectAtIndex:row];
    
            default:
                return @"";
                break;
        }
    
        return nil;
    }
    
    • Where languageArray , genderArray, countryArray represent your different arrays

    • and pickerSelected can be an enum or an int value which you can set according to different UITextField's. Each UITextField will have unique value for PickerView