Как перейти к конкретному виду? - PullRequest
2 голосов
/ 15 сентября 2009

У меня есть 3 вида (xib'd), третий вид открывает модальное представление (также xib'd). Моя цель - избавиться от модального вида и перейти к виду №1.

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

self.statusView = [[StatusViewController alloc] initWithNibName:@"StatusViewController" bundle:nil];
[self.navigationController popToViewController:self.statusView animated:YES];
[self.navigationController popToViewController: 

Я также попробовал следующее, тот же результат. [self.navigationController.viewControllers objectAtIndex: 0] animated: YES];

Я схожу с ума ...

StatusView регулярно синтезирует метод доступа и представляет представление, к которому я хочу перейти.

Ответы [ 2 ]

7 голосов
/ 15 сентября 2009

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

Я предполагаю, что у вас есть контроллер навигации и 3 контроллера представления, которые отображаются в стеке навигации.

Если это так, и вы хотите вернуться к двум экранам одновременно (от # 3 до # 1, пропуская # 2), то вам нужен указатель на представление controller для # 1 (не само представление). Похоже, что первый вызов метода popViewController: в вашем вопросе отправляется в виде.

Пример кода для вывода на первый контроллер представления:

UINavigationController* navController = self.navigationController;
UIViewController* controller = [navController.viewControllers objectAtIndex:0];
[navController popToViewController:controller animated:YES];

Если вы попробовали это, и это не сработало, возможно, что-то пошло не так:

  • Может быть self.navigationController на самом деле не тот объект.
  • Возможно, ожидаемое вами представление на самом деле не является видом # 0 в стеке навигации.
  • Возможно, контроллер навигации, с которым вы работаете, в данный момент не виден.

Вот некоторые дальнейшие шаги, которые вы можете предпринять, чтобы проверить эти гипотезы:

  • При первом выделении контроллера навигации, с которым вы хотите работать, позвоните NSLog(@"Nav controller is at %p", navController);, и в этом коде добавьте вызов к NSLog(@"Now my navController is at %p", navController); и убедитесь, что адреса совпадают.
  • Если правильный навигационный контроллер, распечатайте текущий стек навигации; что-то вроде этого (предполагается, что каждый контроллер представления имеет свое имя класса):

    for (UIViewController* viewController in navController.viewControllers) {
      NSLog(@"%s", class_getName([viewController class]));
    }
    
  • Сделайте что-нибудь визуальное с навигационным контроллером, которое вы считаете видимым, чтобы убедиться, что оно действительно есть. Например, [navController.visibleViewController.view addSubview:aColorFulView];, где aColorFulView является визуально очевидным UIView.

1 голос
/ 15 сентября 2009

-popToViewController позволяет вывести контроллеры из стека. То, что вы хотите сделать, это выдвинуть новых контроллеров представления в стек, поэтому используйте:

[self.navigationController pushViewController: self.statusView animated: YES];

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