UIPicker标签与输出不同

时间:2012-07-31 21:13:10

标签: objective-c ios uipickerview

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

enter image description here

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

1 个答案:

答案 0 :(得分: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,或者如果是这样,在什么版本中。例如,你必须在早期版本中用[NSNumber numberWithFloat:10.3]替换@ 10.3。