Выдвижение контроллеров представления в UITableViewController сгруппировано
Итак, у меня есть 3 раздела, как я уже говорил в моем предыдущем вопросе, например, "A", "B", "C".
Это код, который я использую:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row)
{
case 0:
[self.navigationController pushViewController:[[[FirstViewController alloc] initWithNibName:nil bundle:nil] autorelease] animated:YES];
break;
case 1:
[self.navigationController pushViewController:[[[SecondViewController alloc] initWithNibName:nil bundle:nil] autorelease] animated:YES];
break;
etc..
}
}
Это моя проблема: в "А" у меня 6 элементов. Если я использую переключатель от 0 до 5, он выталкивает нужные контроллеры вида. Но когда мне нужно вытолкнуть контроллеры вида для секции "B", которая содержит еще 9 элементов, я продолжаю работу со счетчиком (например, случай 7,8 и т. Д.), Он снова начинает показывать контроллеры с самого начала (это снова выталкивает FirstViewController"и т. д.). Та же история для раздела" C ". Как решить эту проблему?
Я ненавижу сгруппированные столы, черт побери.
Редактировать: новый код, цикл
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.section)
{
case 0:
switch (indexPath.row) {
case 0:
[self.navigationController pushViewController:[[[FirstViewController alloc] initWithNibName:nil bundle:nil] autorelease] animated:YES];
break;
case 1:
[self.navigationController pushViewController:[[[SecondViewController alloc] initWithNibName:nil bundle:nil] autorelease] animated:YES];
break;
}
case 1:
switch (indexPath.row) {
case 0:
[self.navigationController pushViewController:[[[ThirdViewController alloc] initWithNibName:nil bundle:nil] autorelease] animated:YES];
break;
case 1:
[self.navigationController pushViewController:[[[FourthViewController alloc] initWithNibName:nil bundle:nil] autorelease] animated:YES];
break;
case 2:
[self.navigationController pushViewController:[[[FifthViewController alloc] initWithNibName:nil bundle:nil] autorelease] animated:YES];
break;
}
case 2:
switch (indexPath.row) {
case 0:
[self.navigationController pushViewController:[[[SixthViewController alloc] initWithNibName:nil bundle:nil] autorelease] animated:YES];
break;
case 1:
[self.navigationController pushViewController:[[[SeventhViewController alloc] initWithNibName:nil bundle:nil] autorelease] animated:YES];
break;
}
}
}
Я явно вырезал код, слишком длинный в противном случае.
Изменить 2:
Работал! Серхио ответил правильно, но я положил if (indexPath.section == 0)
вместо switch (indexPath.section){}
1 ответ
NSIndexPath
indexPath
аргумент, что didSelectRowAtIndexPath
передается имеет два свойства: row
а также section
, Если вы правильно используете section
информация, вы сможете выделить среди трех разделов, которые у вас есть.
Например (это некрасиво, но это будет работать):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.section)
{
case 0:
switch (indexPath.row)
{
case 0:
...
break;
...
}
break;
case 1:
switch (indexPath.row)
{
case 0:
...
break;
...
}
break;
etc...
}
}
Лучшим решением, IMO, было бы кодирование в вашем источнике данных типа подстолбца, связанного с каждым элементом, так что вам не нужен большой переключатель, и каждая ячейка уже "знает", какую подстолкну следует открыть. Вы можете проверить Class
тип (посмотрите также на этот вопрос).