#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 и т.д. И т.д. Я показываю только имя подкатегории в своей ячейке.