Раздел, получающий значения ячеек другого раздела

#iphone

#iPhone

Вопрос:

Я пытаюсь получить первые пять карточек в одном разделе, а остальные пять — в следующем разделе табличного представления. На самом деле я выполнил синтаксический анализ и не смог получить правильные значения ячеек. То, что я получаю, — это комбинированные значения, например: в section = birthday значениях ячеек есть card1 , card2 и снова card1 , card 2 of new year section , а в другом разделе повторяется то же самое. Что мне следует сделать, чтобы сгруппировать, т.е. card1 открытка 2 в разделе «День рождения» и card1 , card2 должна быть в разделе «Новый год». Вот мой код:

  (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 2;
    NSLog(@"section in rv");
}

 (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [appDelegate.books count];
        NSLog(@".....appDelegate.books count");
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"cell for index path");
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
      {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
              }
    Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];
    NSLog(@"text for cell...");
    cell.text = aBook.Subcatname;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;
    [appDelegate release];
  }
  

Ответ №1:

Взгляните на ответ dks1725, чтобы настроить правильное количество строк в разделе.

Кроме того, и более непосредственно в ответ на ваш вопрос, в tableView:cellForRowAtIndexPath: для каждой строки таблицы вы всегда возвращаете ячейку с одинаковым содержимым, независимо от того, в каком разделе находится ячейка. Вот почему вы получаете одинаковое содержимое (‘card1’, ‘card2’ и так далее), появляющееся в каждом разделе.

Имейте в виду, что indexPath получаемая данным методом информация состоит из двух компонентов: indexPath.row и indexPath.section . Вы игнорируете второй из них, и поэтому для каждого раздела вы всегда возвращаете одну и ту же ячейку для каждой строки.

Вам нужно будет изменить tableView:cellForRowAtIndexPath: так, чтобы его часть выглядела примерно следующим образом:

 if (indexPath.section == 0) {
    //Retrieve the content you want for each row in section 0
    //It will look something like this, but will be different depending on where you stored your content

    Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];
    cell.text = birthdayBook.Subcatname;
}
if (indexPath.section == 1) {
    //Retrieve the content you want for each row in section 1
    //It will look something like this, but will be different depending on where you stored your content

    Book *aBook = [appDelegate.books objectAtIndex:indexPath.row   5];
    cell.text = newyearsBook.Subcatname;
}
...
  

Вышеизложенное отредактировано в соответствии с вашими комментариями.
Учитывая вашу модель, вы также могли бы сделать это в меньшем количестве строк следующим образом:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)Просмотр таблицы {
 возвращает 2;}
-(NSString *)TableView:(UITableView *)tblView titleForHeaderInSection:(NSInteger)раздел {
 NSString *SectionName = nil;
 переключатель (раздел)
 {
 случай 0:
 SectionName = [NSString stringWithString:@"birthday"];
 разрыв;
 случай 1:
 SectionName = [NSString stringWithString:@"новый год"];
 }
 возвращает название раздела;
}
- (NSInteger)TableView: (UITableView *)TableView numberOfRowsInSection: (NSInteger) раздел
 {
 Количество NSInteger; 
 если (раздел == 0) 
 { count=5; } 
 иначе, если (раздел == 1)
 { count=5; }
 возвращаемое количество;
 }

- (UITableViewCell *)TableView: (UITableView *)TableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 NSLog(@"ячейка для пути к индексу");
 статическая строка NSString *Идентификатор ячейки = @"Cell";
 UITableViewCell *ячейка = [TableView dequeueReusableCellWithIdentifier:идентификатор ячейки];
 если (ячейка == ноль)
 {
 ячейка = [[[UITableViewCell alloc] initWithFrame:CGRectZero Повторный идентификатор:cellIdentifier] автоматический выпуск];
 }
 NSLog(@"текст для ячейки ...");
 если(indexPath.section == 0)
 { 
 Book *aBook = [AppDelegate.books объектатиндекс:indexPath.row];
 ячейка.текст = Книга.Имя вложенной папки;
 } 
 иначе, если(indexPath.section == 1)
 {
 Книга *aBook = [AppDelegate.books объектатиндекс:indexPath.row  5*indexPath.section];
 ячейка.текст = Книга.Имя вложенной папки;
 } 
 ячейка.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
 возвращает ячейку;
 [Выпуск AppDelegate]; 

 }


- (void)TableView:(UITableView *)TableView сделал выбор в отношении indexPath:(NSIndexPath *)indexPath {
 // Логика навигации - создайте и запустите новый контроллер представления

 если (bdvController == nil)
 bdvController = [[BookDetailViewController alloc] initWithNibName:@пакет "BookDetailView": [NSBundle mainBundle]];
 NSLog (@"отправка на контроллер bdv");
 если(indexPath.section == 0)
 { 
 Book *aBook = [AppDelegate.books объектатиндекс:indexPath.row];
 bdvController.aBook = aBook;
 } 
 иначе, если(indexPath.section == 1)
 {
 Книга *aBook = [AppDelegate.books объектатиндекс:indexPath.row  5*indexPath.section];
 bdvController.aBook = aBook;
 }
 NSLog (@"нажать, чтобы просмотреть описание, идентификатор, URL-адрес изображения");
 //bdvController.aBook = aBook;
 NSLog (@"цикл");
 [self.NavigationController pushViewController: анимированный bdvController: ДА]; 
}

Комментарии:

1. У меня есть только один массив books, и я хочу показать первые 5 элементов массивов в одном разделе и следующие 5 элементов во втором разделе

2. Затем, для раздела 0, вы можете оставить код таким, какой он у вас есть: ‘Book *aBook = [AppDelegate.books objectAtIndex:indexPath.row]’

3. И для раздела 2: ‘Книга * aBook = [AppDelegate.books объектатиндекс:indexPath.row 5]’

4. Для -TableView:numberOfRowsInSection: просто всегда возвращайте 5, поскольку в обоих разделах по 5 строк.

5. @salo: я пробовал, но то же повторяющееся значение в разделе = 1. я редактирую приведенный выше код, чтобы показать вам, что я делаю!!

Ответ №2:

Вы должны установить количество строк для каждого раздела примерно так, как показано ниже..

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    if(indexPath.section==0)
       //return no of rows for section 0
    else
      //return no of rows for section 1
}
  

Комментарии:

1. Но он снова показывает те же значения во 2-м разделе, повторяющем значения, не отображающие следующие значения… Я использовал <pre> if (section ==0) возвращает 5; else возвращает 5; </pre>

2. можете ли вы, пожалуйста, предоставить данные из вашего массива? я имею в виду, какие данные есть в вашем массиве и что именно вы хотите отобразить

3. в моем массиве его многочисленные атрибуты, такие как название каталога, имя подкатегории, URL и т.д. И т.д. Я показываю только имя подкатегории в своей ячейке.