UITableView: Обработка выбора ячеек в таблице со смешанными ячейками. Просмотр статических и динамических ячеек.
Я пытаюсь смешать динамические и статические ячейки в сгруппированном табличном представлении: я хотел бы получитьдве секции со статическими ячейками на вершине следуетсечение динамических ячеек (пожалуйста, обратитесь к скриншоту ниже). Я установил содержимое табличного представления встатические ячейки.
редактироватьОсновываясь на советах AppleFreak, я изменил свой код следующим образом:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell;
if (indexPath.section <= 1) { // section <= 1 indicates static cells
cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
} else { // section > 1 indicates dynamic cells
CellIdentifier = [NSString stringWithFormat:@"section%idynamic",indexPath.section];
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
}
return cell;
}
Однако мое приложение вылетает с сообщением об ошибке
Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «UITableView dataSource должен вернуть ячейку из tableView: cellForRowAtIndexPath:»
для раздела 0 и строки 0. Ячейка вернулась изcell = [super tableView:tableView cellForRowAtIndexPath:indexPath]
для раздела 0 и строки 0nil
.
Что не так с моим кодом? Могут ли быть какие-либо проблемы с моими розетками? Я не установил никаких выходов, потому что я подклассUITableViewController
и предположительно не нужно устанавливать какие-либо выходы для просмотра таблицы (?). Любые предложения о том, как лучше это сделать?
Я воссоздал свою сцену в раскадровке (см. Мой обновленный снимок экрана выше) и переписал контроллер представления, чтобы начать с новой базы. Я также прочитал описание на форуме Apple, как предложил applefreak. Тем не менее, я бегу в моей первой проблеме с методомnumberOfSectionsInTableView:tableView
, в котором я увеличиваю количество статических разделов (два) на один.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [super numberOfSectionsInTableView:tableView] + 1 ; }
Приложение упало с сообщением об ошибке:
Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: «*** - [__ NSArrayI objectAtIndex:]: индекс 2 за пределами [0 .. 1]»
Почему этот код не работает для меня, хотя я следовал рекомендациям Apple и Applefreak? Возможно, что tableView немного изменился в iOS 6?
РешениеЯ получил это, чтобы работать теперь, используя пример кода AppleFreaks в своем ответе ниже. Спасибо, AppleFreak!
Редактировать III: Выбор ячейки:Как я могу справитьсявыбор ячейки в представлении таблицы ячеек со смешанными (динамическими и статическими ячейками)? Когда я звонюsuper
и когда я позвонюself tableView
? Когда я использую
[[super tableView] selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]
и попробуйте проверить выбранные пути индекса с помощью:
UITableView *tableView = [super tableView];
if ( [[tableView indexPathForSelectedRow] isEqual:customGrowthIndexPath] ) { .. }
Я получаю возвращаемое значениеnil
.
Так как я не могу найти источник моей ошибки, я действительно буду признателен за вашу помощь