Подтвердить что ты не робот

PopTOViewController

У меня есть кнопка с именем "HOME". В этом действии кнопки у меня есть следующий код:

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];

Когда я нажимаю эту кнопку, мое приложение падает.

Изменяя индекс от 1 до 2, он отлично отображает представление.

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];

Моя последовательность просмотра - Page1 → Page2 → Page3

Я хочу перейти с Страница 3 на страницу1, но приложение выйдет из строя. От Page3 до Page2 он работает нормально.

4b9b3361

Ответ 1

Попробуйте это.

Где я написал SeeMyScoresViewController, вы должны написать свой класс View Controller, на который вы должны пойти (например, Class of Home)

NSArray *viewControllers = [[self navigationController] viewControllers];
for( int i=0;i<[viewControllers count];i++){
    id obj=[viewControllers objectAtIndex:i];
    if([obj isKindOfClass:[SeeMyScoresViewController class]]){
        [[self navigationController] popToViewController:obj animated:YES];
        return;
    }
}

Ответ 2

Если вы хотите перейти в корневой диспетчер представлений (стр. 1), просто используйте:

    [self.navigationController popToRootViewControllerAnimated:YES];

Также первый элемент в индексе не является элементом 1, а item 0:

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];

Это приведет вас к первому viewController, но будет проще использовать метод popToRootViewController.

Ответ 3

Часто важно сделать это сверху стека, поэтому:

В подклассе UINavigationController или категории:

- (void)popToLast:(Class)aClass
{
    for (int i=self.viewControllers.count-1; i>=0; i--)
    {
        UIViewController *vc = self.viewControllers[i];
        if ([vc isKindOfClass:aClass])
        {
            [self popToViewController:vc animated:YES];
            break;
        }
    }
}

и вы называете это

popToLast:[SomeViewController class];

Ответ 4

Современный способ возврата к определенному контроллеру:

[self.navigationController.viewControllers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

    if ([obj isKindOfClass:[MyViewController class]]) {
        [self.navigationController popToViewController:obj animated:YES];
        *stop = YES;
    }
}];

MyViewController - это контроллер, к которому вы хотите вернуться.