2014-06-27 50 views
1

我正在使用帶有三個組件的UIpicker。我希望如果我根據所選組件在第一個組件中選擇一行,它將顯示第二個組件中相應數據的值。 我使用數組的第一個組件的值,如@「UK」,@「US」,@「EU」。現在我想如果用戶在第一個組件中選擇英國,那麼我想加載UKsize1 = [NSArray arrayWithObjects:@「1 「,@」2「,@」3「,@」4「,@」5「,零];在第二個組件中,如果用戶在第一個組件中選擇了US,那麼我想在第二個組件中加載EUsize2=[NSArray arrayWithObjects:@"11",@"22",@"33",@"44",@"55", nil];。相同的歐盟值,然後我想加載USsize3=[NSArray arrayWithObjects:@"111",@"222",@"333",@"444",@"555", nil];。我希望第二個分量值根據第一個分量改變,第三個分量值是固定的。如何根據UIPickerview中的第一個組件選擇來設置第二個組件中的數據

這段代碼我試過但我沒有得到確切的價值。

- (id)init 
{ 
    if (self = [super init]) { 
     notesToDisplayForKey = [NSArray arrayWithObjects: @"UK", @"US", @"EU", nil]; 
     scaleNames = [NSArray arrayWithObjects: @"11", @"22", @"33", @"555",@"666",@"777",nil]; 
     scaleValue=[NSArray arrayWithObjects: @"1" ,@"2", @"3", @"4",@"5",@"6", @"7",@"8",@"9", @"10",@"11",nil]; 
     UKsize1=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil]; 
     EUsize2=[NSArray arrayWithObjects:@"11",@"22",@"33",@"44",@"55", nil]; 
     USsize3=[NSArray arrayWithObjects:@"111",@"222",@"333",@"444",@"555", nil]; 
    } 
    return self; 
} 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 3; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    // Returns 
    switch (component) { 
     case 0: return [notesToDisplayForKey count]; 
     case 1: 
      if([selectedKey isEqualToString:@"UK" ]) 
      { 

       return [UKsize1 count]; 
      } 
      else if([selectedKey isEqualToString:@"US"]) 
      { 

       return [USsize3 count]; 
      } 
      else 
      { 

       return [EUsize2 count]; 
      } 
      //return [scaleNames count]; 
     case 2: return [scaleValue count]; 
     default:break; 
    } 
    return 0; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    switch (component) { 
     case 0: return [notesToDisplayForKey objectAtIndex:row]; 
     case 1:if([selectedKey isEqualToString:@"UK" ]) 
     { 
      selectedScale = [scaleNames objectAtIndex:row]; 
      return selectedScale; 
     } 
     else if([selectedKey isEqualToString:@"US"]) 
     { 
      selectedScale = [USsize3 objectAtIndex:row]; 
      return selectedScale; 
     } 
     else 
     { 
      selectedScale = [EUsize2 objectAtIndex:row]; 
      return selectedScale; 
     } 
     case 2: return [scaleValue objectAtIndex:row]; 
     default:break; 
    } 
    return nil; 
} 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    // NSLog(@"Row %i selected in component %i", row, component); 
    switch (component) { 
     case 0: 
      selectedKey = [notesToDisplayForKey objectAtIndex:row]; 
      return; 

     case 1: 

      // selectedScale = [scaleNames objectAtIndex:row]; 
      if([selectedKey isEqualToString:@"UK" ]) 
        { 
         selectedScale = [scaleNames objectAtIndex:row]; 
         return; 
        } 
       else if([selectedKey isEqualToString:@"US"]) 
       { 
       selectedScale = [USsize3 objectAtIndex:row]; 
       return; 
       } 
       else 
       { 
       selectedScale = [EUsize2 objectAtIndex:row]; 
       return; 
       } 
      return; 

     case 2: 
      selectedValue = [scaleValue objectAtIndex:row]; 
      return; 
     default:break; 
    } 
} 

screenshot

+0

什麼問題?當你選擇歐盟時,你不想要11,22,33 ...陣列嗎?這些是EUsize2陣列的價值。 – rdelmar

+0

我想要如果歐盟11,22,33,如果英國那麼UKsize1陣列價值會來。 @rdelmar – Sport

回答

3

只是檢查這個方法。它會奏效。

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
    { 
     // NSLog(@"Row %i selected in component %i", row, component); 
     switch (component) { 
      case 0: 
       selectedKey = [notesToDisplayForKey objectAtIndex:row]; 
        [pickerView reloadAllComponents]; 
       return; 

      case 1: 

       // selectedScale = [scaleNames objectAtIndex:row]; 
       if([selectedKey isEqualToString:@"UK" ]) 
         { 
          selectedScale = [UKsize1 objectAtIndex:row]; 
          return; 
         } 
        else if([selectedKey isEqualToString:@"US"]) 
        { 
        selectedScale = [USsize3 objectAtIndex:row]; 
        return; 
        } 
        else 
        { 
        selectedScale = [EUsize2 objectAtIndex:row]; 
        return; 
        } 
       return; 

      case 2: 
       selectedValue = [scaleValue objectAtIndex:row]; 
       return; 
      default:break; 
     } 
    } 
+0

現在就工作了@方形謝謝 – Sport

3

好像你不重裝選擇器....每次你需要改變你需要重新加載選擇器一樣的UITableView揀貨機的數據的時間。

//重新加載整個視圖或單一成分

- (void)reloadAllComponents; 
- (void)reloadComponent:(NSInteger)component; 
+0

如何重新加載選擇器視圖。以及在哪裏調用reload方法@紅魔鬼 – Sport

相關問題