0

我有一个填充了 NSarray 的 UIPicker。这会将 发送row selected到文本字段。我想知道如何更改我的选择器中行的名称。抱歉,如果不清楚我很难清楚地解释我的意思。

在此处输入图像描述

 - (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    arrStatus = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", @"D", nil];
}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    //One column
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
    //set number of rows
    return arrStatus.count;
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    //set item per row
    return [arrStatus objectAtIndex:row];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    NSInteger selectedRow = [result selectedRowInComponent:0];
    text1.text = [arrStatus objectAtIndex:selectedRow];
}
4

1 回答 1

1

这是我认为接近您想要的示例的示例。如果您有 2 个数组,一个包含国家名称,一个包含人口(以相同的顺序),您可以使用以下代码创建一个包含两个值的字典数组(您实际上可以直接使用 2 个数组, 但如果您进行任何更改, 这将要求您使它们保持同步。最好像下面那样做):

NSMutableArray *arrStatus = [NSMutableArray array];
    NSArray *nameArray = [NSArray arrayWithObjects:@"Albania",@"Brazil",@"Columbia", nil];
    NSArray *popArray = [NSArray arrayWithObjects:@10.3,@200,@50, nil];
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    for (int i=0; i<nameArray.count; i++) {
        [dict setValue:[nameArray objectAtIndex:i] forKey:@"countryName"];
        [dict setValue:[popArray objectAtIndex:i] forKey:@"poulation"];
        [arrStatus addObject:[dict copy]];
    }

现在,在您的选择器方法中,您可以这样做:

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    //set item per row
    return [[arrStatus objectAtIndex:row] valueForKey:@"countryNames"];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    text1.text = [arrStatus objectAtIndex:row] valueForKey:@"population"];
}

这会将人口数字放在文本字段中,并将国家名称放在选择器中。请注意,我更改了在 didSelectRow 方法中获取值的方式——无需定义 selectedRow,传递给该方法的行参数已经具有该值。

我将人口数字放入 popArray 的方式仅适用于 OS X 10.8 我认为,我不确定它是否适用于 iOS,或者如果可以,适用于哪个版本。例如,在早期版本中,您必须将 @10.3 替换为 [NSNumber numberWithFloat:10.3]。

于 2012-07-31T22:21:08.813 回答