Условно пропуская UIViewController в приложении iOS 5 с UINavigatonController - PullRequest
10 голосов
/ 14 марта 2012

В нашем iOS-приложении с тремя UIViewController с друг за другом мы хотели бы пропустить среднее на основе некоторых условий и перейти непосредственно с первого на третье.Однако пользователь должен иметь возможность вернуться ко второму с помощью кнопки «Назад» на третьем контроллере.

Я пытался [self performSegueWithIdentifier:@"segueId" sender:sender]; из viewDidLoad, viewWillAppear, но это повреждает панель навигациикак указано в журнале отладки.Вызов этого кода из viewDidAppear работает нормально, но тогда уже отображается второе представление, чего я и пытался избежать в первую очередь.

Я также пытался [self.navigationController pushViewController:vc animated:NO];, но в результате навигационная панель была повреждена аналогичным образом, хотя в этот раз в журнале отладки таких записей нет.

Какой способ поддержки поддерживается (еслиэто вообще возможно)?

Цель - iPhone4 с iOS 5.1, а среда разработки - Xcode 4.3.

Ответы [ 2 ]

8 голосов
/ 14 марта 2012

Я использую следующий код в приложении. Работает точно так, как ожидалось.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    SecondViewController *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
    if (indexPath.row == 0) {
        // skip second vc
        ThirdViewController *thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ThirdViewControllerViewController"];
        [self.navigationController pushViewController:secondVC animated:NO];
        [self.navigationController pushViewController:thirdVC animated:YES];
    }
    else {
        // push second vc
        [self.navigationController pushViewController:secondVC animated:YES];
    }
}
2 голосов
/ 14 марта 2012

Если вы хотите пропустить контроллер представления, вы можете просто вызвать UINavigationController setViewControllers:animated:. Он будет анимирован до последнего контроллера в предоставленном массиве, и пользователь сможет "вернуться" из этого стека.

Вы можете создать массив контроллеров представления любым удобным вам способом; возможно, начиная с существующего массива контроллеров представления:

NSMutableArray* newViewControllers = [[navController.viewcontrollers mutablecopy] autorelease];

[newViewControllers addObject: ...];

[navController setViewControllers: newViewControllers animated: YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...