简体   繁体   中英

two pickerview in relation to each other

I am trying to develop a part of my application where i can create two UIPickerView one depends on the other. Here is my code below as i have two UIpickerview (pickerView1 and pickerView2). when I change the selects of pickerView1 one ,the data must be changed in pickerView2.

the problem is when I change the select of pickerView1 every time i have old select. for example if i select the second value of pickerView1 and before i select the first value of pickerView1, then i have on pickerView2 the value of first select and not for second value.

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    arrayNo = [[NSMutableArray alloc] init];
    [arrayNo addObject:@" 100 "];
    [arrayNo addObject:@" 200 "];

    arrayNo2= [[NSMutableArray alloc] init];
    [arrayNo2 addObject:@" a "];
    [arrayNo2 addObject:@" e "];
    [arrayNo2 addObject:@" c "];
    [arrayNo2 addObject:@" v "];
    [arrayNo2 addObject:@" g "];

    arrayNo3 = [[NSMutableArray alloc] init];
    [arrayNo3 addObject:@""];

    NSArray *keys    = [NSArray arrayWithObjects:@" ",@"key1", @"key2", nil];
    NSArray *objects = [NSArray arrayWithObjects:arrayNo3,arrayNo, arrayNo2, nil];
    _dataOfProfile   = [NSDictionary dictionaryWithObjects:objects
                                                   forKeys:keys];

    pickerView1.tag  = 1;
    pickerView2.tag  = 2;

    [pickerView1 selectRow:0 inComponent:0 animated:NO];
    [pickerView2 selectRow:0 inComponent:0 animated:NO];
    selectedKey =[keys objectAtIndex:0];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;

}

// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
    if (pickerView.tag == 1)
    {
        NSArray *key = [_dataOfProfile allKeys];    
        return [key count];
    }
    else
    {
        if (pickerView.tag == 2)
        {
            NSArray *keys =[_dataOfProfile objectForKey:selectedKey];
            return [keys count];

        }
    }

}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row   forComponent:(NSInteger)component
{
    if (pickerView.tag == 1)
    {
        NSArray *keys =[_dataOfProfile allKeys];
        return [keys objectAtIndex:row];
    }
    else
    {
        if (pickerView.tag == 2)
        {

            return [[_dataOfProfile objectForKey:selectedKey] objectAtIndex:row];
        }
    }


}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row   inComponent:(NSInteger)component
{
    if (pickerView.tag == 1)
    {
        //Means a value just changed on your picker 2!, update datasource for your second picker
        [pickerView2 reloadComponent:0];
        selectedKey=    [[_dataOfProfile allKeys] objectAtIndex:row];

    }

}

Try like following -

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row   inComponent:(NSInteger)component
{
    if (pickerView.tag == 1)
    {
        //Means a value just changed on your picker 2!, update datasource for your second picker


        //write this line before loading the picker.....

         selectedKey=    [[_dataOfProfile allKeys] objectAtIndex:row];
        [pickerView2 reloadComponent:0];          

    }    
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM