Программно создается два UIPickerViews, но все значения идут в секунду - PullRequest
0 голосов
/ 30 января 2012

Я пишу код для программного создания представления.В этом представлении я создаю два UIPickerView, однако, как объясняется в заголовке, когда я собираюсь заполнить списки данными, все данные попадают во вторую таблицу, а ни в одну в первую.Я могу видеть, где именно проблема, но не знаю, как ее исправить.Вот код с редактированием вокруг несвязанных частей.

в следующем разделе я создаю окно выбора.По сути, у меня есть большой список данных.Если я вижу какое-либо вхождение «RadioButton», я создаю PickerView.RadioButton может появляться несколько раз, и именно в этом заключается моя проблема.

 for(int i = 0; i < [list count]; i++){  
 ...

 else if([input.controlTypeName compare:@"RadioButton"] == NSOrderedSame){
        [radioList addObject:input.sourceText]; 
        radioPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(50, y, 220, 200)];
        radioPicker.delegate = self;
        radioPicker.showsSelectionIndicator = YES;
        [inputsView addSubview:radioPicker];
        y = y+220;

    }

методы делегата следующие:

       - (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component {
// Handle the selection
}

// tell the picker how many rows are available for a given component
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

if([pickerView isEqual: radioPicker]){
    return [radioList count];
}




 // tell the picker how many components it will have
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
   return 1;
}

 // tell the picker the title for a given component
 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

  if([pickerView isEqual: radioPicker]){
    id myArrayElement = [radioList objectAtIndex:row];
    NSString *title = myArrayElement; 
    NSLog(@"title to fill radio:%@", title); 
    return title;
  }


 }

// tell the picker the width of each row for a given component
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
int sectionWidth = 200;

   return sectionWidth;
 }

По сути, то, что, похоже, происходит, происходит во 2-м созданиииз ListPicker 'RadioButton', первое создание теряет тег 'radioPicker', и строка

if([pickerView isEqual: radioPicker]){ 

завершается неудачей.Таким образом, все данные помещаются во второе (и последнее) создание.Но я не знаю, как этого не произошло.Любые идеи будут великолепны.

Спасибо.

1 Ответ

2 голосов
/ 30 января 2012

Проблема в том, что у вас есть единственная переменная экземпляра, radioPicker.Хорошо иметь два UIPickerView и быть делегатом обоих.Однако необходимо основывать методы делегата на переданном значении, а не на (единственной) переменной экземпляра.

На самом деле нет необходимости иметь radioPicker.После того, как вы отправите addSubview:, просто автоматически выпустите представление (если вы не используете ARC).

Чтобы различать представления, вы можете установить свойство tag и использовать его в таких вещах* делегированный метод titleForRow:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...