2013-04-03 5 views
0

я есть UIPickerView и я хочу, чтобы иметь 2 колонки, заполненные с элементами из моих массивов, но я не могу понять, как, есть мои массивы:Как заполнить pickerView правильно

-(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); 

} 

Но это не работает.

ответ

1

Ваши методы источника данных/делегата идеальны.

Позаботьтесь о следующих вещах

1) расПредеЛение standartHeightArray и standartWeightArray объектов должным образом. Выделите объекты массива, как показано ниже, если вы еще не сделали этого.

-(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)

+0

Да, теперь он работает, один маленький вопрос, я незнакомый с этим новым синтаксисом, является «новым», равным «alloc] init];»? –

+0

Нет разницы. Вы можете использовать любой из них. – nkongara

1

Уверен, что вы все правильно настроите меня.

Но убедитесь, что вы установили делегат UIPickerView и источник данных в тот же объект/класс (ViewController?), Где живут ваши источники данных PickerView.

Вы можете установить это либо в интерфейсном построителе Xcode, либо в программном виде «viewDidLoad:» (если у вас есть представление выбора для IBOutlet).

+0

Я предполагаю, что я подключил его правильно, просто потому, что вижу 2 пустых «колеса» вместо одного, я заявляю, что он должен вернуть 2 колеса .. –

+0

если ваши колесики выбора пустые, это обычно является признаком того, что ваш делегат и методы источника данных для сборщика *** не установлены ***. –

+0

Я проверил, и он уладил. Еще одна вещь: желтое предупреждение - (NSString *) pickerView: (UIPickerView *) pickerView titleForRow: (NSInteger) строка для компонента Компонент: (NSInteger), который говорит - контроль достигает конца не-void функции. Но, я действительно возвращал значения, почему это предупреждение? –

Смежные вопросы