2013-06-27 5 views
0

Я пытаюсь разработать часть моего приложения, где я могу создать два UIPickerView, каждый зависит от другого. Вот мой код ниже, поскольку у меня есть два UIpickerview (pickerView1 и pickerView2). когда я меняю выбор pickerView1 один, данные должны быть изменены в pickerView2.два pickerview по отношению друг к другу

проблема в том, что я меняю выбор pickerView1 каждый раз, когда у меня есть старый выбор. например, , если я выбираю второе значение pickerView1 и перед тем, как выбрать первое значение pickerView1, тогда у меня на pickerView2 значение первого select, а не для второго значения.

- (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]; 

    } 

} 
+0

ответа Его :( –

ответ

3

Попробуйте как следующий -

- (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];   

    }  
} 
+1

Действительно Большое спасибо за ваш ответ :)))) –

+1

@ B.M.A - С удовольствием. Наслаждайтесь кодированием :-) – Rohan

+0

Хорошее наблюдение .. :) – AtWork