UINavigationController: дублирующий контроллер в позиции в стеке - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть UINavigationController, который помещает несколько стеков в стек.Когда я пройду несколько уровней, мне нужно вызвать modal view, который является копией UINavigationController и находится на том же уровне, что и вызывающий навигационный контроллер.

Возможно ли это?

Ответы [ 4 ]

0 голосов
/ 11 апреля 2013

Пожалуйста, позвольте мне обобщить ответ с небольшим фрагментом кода:

UIViewController *previousVC = nil;
if ([self.navigationController.viewControllers count] > 1)
    previousVC =
        [self.navigationController.viewControllers objectAtIndex:
        ([self.navigationController.viewControllers count] -2)];
else
    previousVC = [self.navigationController.viewControllers objectAtIndex:0];
0 голосов
/ 22 февраля 2012

Да, это возможно.

Чтобы модернизировать новый стек навигации , создайте новый контроллер навигации и заполните его стек (setViewControllers:) нужными представлениями.Вы могли бы использовать те же экземпляры VC в этом новом стеке, но я предлагаю вместо этого новые экземпляры (возможно, из тех же классов).Старый стек будет скрыт, пока этот новый модальный стек находится на месте.Отмените NavCon, чтобы вернуть свой старый стек.

Если вы просто хотите заменить VC в текущем стеке, вы можете вытолкнуть текущий VC (возможно, не анимированный!), А затем нажать новый.Пользователь сможет перемещаться по существующему стеку, используя левую кнопку на панели навигации, и перемещаться вперед по мере его реализации.

Вызов UINavigationController:setViewControllers заменяет весь стек navcon одним вызовом.Этот переход может быть анимированным или нет на ваше усмотрение.

0 голосов
/ 22 февраля 2012

Лучше добавить кнопку в левом навигационном элементе в каждом представлении и написать действие для popto RootView для удаления стека

[self.navigationController popToRootViewControllerAnimated:YES];

добавить кнопку назад в viewdidload

//To set the back buttin on Navigation bar
    UIBarButtonItem *backButton = [[[UIBarButtonItem alloc] initWithTitle:@"<--" style:UIBarButtonItemStyleBordered target:self action:@selector(backclick:)] autorelease];
    self.navigationItem.leftBarButtonItem = backButton

Теперь действие

- (IBAction)backclick:(id)sender
{
    // To goback to the main view
    [self.navigationController popToRootViewControllerAnimated:YES];

}
0 голосов
/ 22 февраля 2012

Вы не должны взаимодействовать с tableView напрямую, если он в данный момент не виден. (то есть когда другой ViewController находится сверху стека)

Предпочтительным решением проблемы, которую вы описали в комментариях, является изменение источника данных и перезагрузка tableView, как только он будет отображен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...