iOS - странная проблема с навигацией? - PullRequest
0 голосов
/ 15 августа 2011

У меня есть 3 UIViewControllers в моем UINavigationController.В некоторых моментах я хочу перейти к rootViewController и оттуда перейти к новому UIViewController, и он не будет работать.

Есть предложения?

- (IBAction)goToRootAndNavigateToViewController
{
   [self.navigationController popToRootViewControllerAnimated:YES];

   MyViewController *mvc = [[MyViewController alloc] init];
   [self.navigationController pushViewController:mvc animated:YES];
   [mvc release];

   //This takes me to the rootViewController but it doesn't navigate to MyViewController
}

Попытка использовать executeSelector:WithDelay:

- (void)goToRootAndNavigateToViewController
{
    [self.navigationController popToRootViewControllerAnimated:YES];

    [self performSelector:@selector(doSomething) withObject:nil afterDelay:10];
}

- (void)doSomething
{
    MyViewController *mvc = [[MyViewController alloc] init];
    [self.navigationController pushViewController:mvc animated:YES];
    [mvc release];
}

Ответы [ 4 ]

0 голосов
/ 16 августа 2011

Полагаю, это связано с вашим текущим viewcontroller, использующим - (IBAction)goToRootAndNavigateToViewController, так или иначе теряющим свой контроль после срабатывания. Таким образом, делать последовательные заявления не работает.

На вашем месте я бы удостоверился, что нажатие экземпляра MyViewController всегда выполняется на rootViewController по вашему выбору, а не на текущем контроллере просмотра, который будет извлечен из UINavigationController и, возможно, освобожден и освобожден .

Возможно, вы захотите добавить реализацию метода делегата, например, - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated в вашем rootViewController

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    // Check the right condition for pushing MyViewController...
    // if it's YES...
    MyViewController *mvc = [[MyViewController alloc] init];
   [self.navigationController pushViewController:mvc animated:YES];
   [mvc release];
}

В этой реализации вы можете нажать MyViewController экземпляр. Одна вещь, которую вы должны сделать заранее, это использовать какой-то условный флаг, который убедится, что ситуация правильная для popToRootViewController, затем нажмите MyViewController

0 голосов
/ 15 августа 2011

Вам нужно нажать свой контроллер mvc, когда анимация будет завершена. Попробуйте вызвать его после завершения первой анимации (например, в - (void)viewDidAppear:(BOOL)animated)

0 голосов
/ 15 августа 2011

Я не знаю, почему вы сталкиваетесь с этой проблемой, но одно из решений, которое вы могли бы попробовать, это вставить новый контроллер представления в метод -viewDidAppear: вашего корневого контроллера представления.

0 голосов
/ 15 августа 2011

Я считаю, что popToRootViewController занимает полный цикл NSRunLoop.

Вам нужно будет выдвинуть ваш следующий контроллер представления с отдельной функцией, используя что-то вроде performSelector:withObject:afterDelay.

или вы всегда можете просто сделать [self.navigationController setViewControllers:] вызов, чтобы установить их вручную

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