我使用的是一个包含三个组件的UIpicker。如果我在第一个组件中根据所选组件选择一行,它将显示第二个组件中相应数据的值。我使用数组作为第一个组件值,如@" UK“、@" US”、@"EU".now,如果用户在第一个组件中选择了UK,则希望加载UKsize1=NSArray arrayWithObjects:@"1“、@"2”、@"3“、@"4”、@"5“、零;在第二个组件中,如果用户在第一个组件中选择了US,那么我希望在第二个组件中加载EUsize2=[NSArray arrayWithObjects:@"11",@"22",@"33",@"44",@"55", nil];。同样,对于EU值,我想加载USsize3=[NSArray arrayWithObjects:@"111",@"222",@"333",@"444",@"555", nil];。我希望在第一个组件的基础上改变第二个分量值,第三个分量值是固定的。
这段代码我试过了,但没有得到确切的值。
- (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;
}
}

发布于 2014-06-30 06:10:45
只要检查一下这个方法,.it就可以工作了。
- (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;
}
}发布于 2014-06-27 15:51:02
看起来,您没有重新加载picker....Every时间--您需要在选择器中更改数据--您需要像UITableView一样重新加载选择器。
//重新加载整个视图或单个组件
- (void)reloadAllComponents;
- (void)reloadComponent:(NSInteger)component;https://stackoverflow.com/questions/24453710
复制相似问题