2014-06-27 53 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

相关问题