Условно пропускание UIViewController в приложении iOS 5 с помощью UINavigatonController
В нашем приложении iOS с тремя UIViewController
один за другим, мы хотели бы пропустить средний на основе некоторого условия и перейти непосредственно от первого к третьему. Тем не менее, пользователь должен иметь возможность вернуться ко второму через кнопку "Назад" на третьем контроллере.
Я пробовал [self performSegueWithIdentifier:@"segueId" sender:sender];
из viewDidLoad
, viewWillAppear
, но это искажает панель навигации, как указано журналом отладки. Вызов этого кода из viewDidAppear
работает отлично, но затем отображается второе представление, чего я пытался избежать в первую очередь.
Я также пробовал [self.navigationController pushViewController:vc animated:NO];
, но результат аналогично поврежден на навигационной панели, хотя на этот раз журнал отладки не имеет таких записей.
Каким будет поддерживаемый способ сделать это (если это вообще возможно)?
Целью является iPhone4 с iOS 5.1, а среда dev - Xcode 4.3.
Ответы
Ответ 1
Я использую следующий код в приложении. Работает точно так, как ожидалось.
- (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
Если вы хотите пропустить контроллер вида, вы можете просто вызвать UINavigationController setViewControllers:animated:
Он будет анимировать последний контроллер в поставляемом массиве, и пользователь сможет "вернуться" из этого стека.
Вы можете создать массив контроллеров вида любым способом; возможно, начиная с существующего массива контроллеров представлений:
NSMutableArray* newViewControllers = [[navController.viewcontrollers mutablecopy] autorelease];
[newViewControllers addObject: ...];
[navController setViewControllers: newViewControllers animated: YES];