如何正确填充pickerView

时间:2013-04-03 22:10:38

标签: iphone objective-c uipickerview

我有一个UIPickerView,我希望它有2列填充我的数组中的项目,但我无法弄清楚如何,有我的数组:

-(void)fillingStandartWeightArray{

    if (!standartWeightArray){
        for (int i=25; i<150 ;i++){
            NSString *weightString;
            weightString = [NSString stringWithFormat:@"%d kg", i];
            [standartWeightArray addObject:weightString];
            NSLog(@"%@", weightString);
        }
    }

}

-(void)fillingStandartHeightArray{

    if (!standartHeightArray){
        for (int i=85; i<250; i++){
            NSString *heightString;
            heightString = [NSString stringWithFormat:@"%d cm", i];
            [standartHeightArray addObject:heightString];
            NSLog(@"%@", heightString);
        }
    }

}

更具体一点,我不知道如何“告诉”UIPickerView用一个数组填充其中一个轮子,另一个用其他数组填充。我试过这个:

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{


    if (component == 0){
        return [standartWeightArray count];
    }   else {
        return [standartHeightArray count];
    }
}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

    return 2;
}

-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{

    if (component == 0)
        return [standartWeightArray objectAtIndex:row];
    else if (component == 1)
        return [standartHeightArray objectAtIndex:row];
}

我确实调用了viewDidLoad部分中的函数:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self fillingStandartWeightArray];
    [self fillingStandartHeightArray];
    NSLog(@"%@", standartWeightArray);

}

但那不起作用。

2 个答案:

答案 0 :(得分:1)

当然看起来你正确地设置了一切。

但是请确保将UIPickerView委托和数据源设置为PickerView数据源方法所在的同一对象/类(ViewController?)。

您可以在Xcode的Interface Builder中设置此项,也可以在“viewDidLoad:”时间以编程方式设置(如果您将选择器视图设置为IBOutlet)。

答案 1 :(得分:1)

您的数据源/委托方法非常完美。

照顾以下事项

1)正确分配standartHeightArraystandartWeightArray个对象。如果您还没有这样做,请按如下方式分配数组对象。

-(void)fillingStandartWeightArray{

    if (!standartWeightArray){
   // Allocate the array
       standartWeightArray = [NSMutableArray new];
        for (int i=25; i<150 ;i++){
            NSString *weightString;
            weightString = [NSString stringWithFormat:@"%d kg", i];
            [standartWeightArray addObject:weightString];
            NSLog(@"%@", weightString);
        }
    }

}

-(void)fillingStandartHeightArray{

    if (!standartHeightArray){
   // Allocate the array
        standartHeightArray = [NSMutableArray new];
        for (int i=85; i<250; i++){
            NSString *heightString;
            heightString = [NSString stringWithFormat:@"%d cm", i];
            [standartHeightArray addObject:heightString];
            NSLog(@"%@", heightString);
        }
    }

}

2)正确连接选择器的delegate/datasource属性。您可以在界面构建器或代码(viewDidLoad

中执行此操作