Нажатие контроллеров представления в UITableViewController сгруппировано - PullRequest
0 голосов
/ 22 июля 2011

Итак, у меня есть 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 Ответ

3 голосов
/ 22 июля 2011

Аргумент 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 (см. Также этот вопрос ).

...