Кнопка, возвращающая два или более контроллеров - PullRequest
0 голосов
/ 06 мая 2011

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

. Поэтому в определенных ViewControllers нажатие кнопки «назад» должно вызывать появление нескольких ViewControllers, а не только одного впереди.Я попытался создать подкласс NavigationController и переопределить метод popViewController:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
    if([[self.viewControllers lastObject] class] == [MyCOntroller class]){
        [super popViewControllerAnimated:NO]; // pop once

        return [super popViewControllerAnimated:animated]; // pop twice
    } else {
        return [super popViewControllerAnimated:animated];
    }
}

Однако у меня возникают проблемы, когда NavigationTopBar больше не синхронизируется с ViewController впереди.Кто-нибудь сталкивался с такими же проблемами?

Ответы [ 3 ]

4 голосов
/ 06 мая 2011

Вы пытались использовать

popToViewController:animated:

Отображение контроллеров до указанный контроллер представления находится на вершина стека навигации.

Может быть, у вас могут быть пользовательские кнопки возврата для таких контроллеров представления, а затем попробуйте

- (IBAction)backButtonPressed
{
[yourNavigationcontroller popToViewController:viewController animated:YES];
}
0 голосов
/ 20 марта 2018

Другой способ - удалить контроллеры представления, которые вы хотите пропустить, из стека навигации.В приведенном ниже примере вы возвращаетесь к 2 контроллерам вида:

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
[allViewControllers removeObjectAtIndex:[allViewControllers count]-2]; // 2 means last but one
self.navigationController.viewControllers = allViewControllers;
0 голосов
/ 06 мая 2011

Вы должны добавить левую кнопку бар.

UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButton_clicked)];
self.navigationItem.leftBarButtonItem = leftBarButton;
[leftBarButton release];

И

-(void)backButton_clicked {
    [self.navigationController popViewControllerAnimated:YES];
    [self.navigationController popViewControllerAnimated:YES];
    //or pop to special view controller
    //[self.navigationController popToViewController:specVC animated:YES];
}
...