ios7 — Предупреждение: попытка представить UINavigationController на UINavigationController во время презентации

Я получаю предупреждение выше при выборе перехода в didSelectRowAtIndexPath. Это происходит на iPad. iPhone выдает другое предупреждение, и я посмотрю, исправит ли это исправление другое.

У меня есть два перехода в методе. Первый работает без происшествий. Второй принимает предупреждение. Я просмотрел сеть и проверил решения других. нада, поэтому пишу сюда..

Вот код: (Я открыт для лучших способов написать это!)

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //NSLog(@"%s", __FUNCTION__);

    if ((indexPath.section == 0) || (indexPath.section == 1) || (indexPath.section == 2)) return;
    if (indexPath.section > 4) return;

    //Images THIS WORKS OK
    if (indexPath.section == 3 && indexPath.row == 0) { 
        viewController1 = [[ViewController1 alloc] init];
        [self performSegueWithIdentifier:@"detailToV1" sender:self];
        [self.tableView reloadData];
    }

    if (indexPath.section == 3 && indexPath.row == 1) { // THIS REDULTS IN A WARNING
        viewController2 = [[ViewController2 alloc] init];
        [self performSegueWithIdentifier:@"detailToV2" sender:nil];
    }

//Notes THIS WORKS OK BUT I HAD TO USE A NIB TO AVOID THE WARNING
    if (indexPath.section == 4 && indexPath.row == 0) { 

        viewController3 = [[ViewController3 alloc] init];
        [[self navigationController] pushViewController:viewController3 animated:YES];
        [self.tableView reloadData];

    }
}

person ICL1901    schedule 27.01.2014    source источник


Ответы (1)


Каков родительский класс ViewController3? Похоже, это навигационный контроллер, и насколько я понимаю, вы не можете использовать навигационный контроллер внутри другого навигационного контроллера. Если вы хотите сделать что-то подобное, вам нужно представить новый навигационный контроллер из первого навигационного контроллера.

Редактировать:

По сути, если вы используете контроллер навигационного представления для нажатия другого контроллера представления, этот новый контроллер представления остается «внутри» контроллера навигационного представления. (Навигационный VC имеет логику для управления несколькими VC одновременно.) Я считаю, что существует правило, согласно которому ни один навигационный VC не может находиться «внутри» другого навигационного VC. Таким образом, вам нужно просто вернуться к обычному представлению VC, чтобы новый навигационный VC не находился «внутри» исходного навигационного VC. Вместо того, чтобы быть внутри него, он, по сути, будет находиться над ним.

Пример кода:

[self.navigationController presentViewController:ViewController3 animated:YES completion:nil]
person bgfriend0    schedule 27.01.2014
comment
Привет, спасибо за ответ. Контроллер исходного представления является контроллером представления подробной таблицы. Это встроено в splitView и навигационный контроллер. Я заинтригован вашим ответом, не могли бы вы написать несколько строк кода, чтобы показать мне, что именно вы имеете в виду ..? Спасибо еще раз. - person ICL1901; 27.01.2014
comment
еще раз спасибо .. Дело в том, что это VC2 предупреждает меня ... +1 за попытку помочь .. Буду очень признателен за любые идеи по VC2. - person ICL1901; 27.01.2014
comment
О, я поторопился с выводом, что это был VC3, поскольку именно он вставил код, который вы разместили. Я не могу диагностировать VC2, если вы не опубликуете соответствующий код перехода: [self PerformSegueWithIdentifier:@detailToV2 sender:nil]; Что за переход @detailToV2, что ты делаешь, готовясь к переходу? Если это push-переход, это та же фундаментальная проблема, которую я уже описал. - person bgfriend0; 27.01.2014