Вопрос по ios, uinavigationcontroller, iphone, objective-c – Как заставить кнопку возврата навигационной панели вернуться в другой вид контроллера

1

Как мне поступить с контроллером UINavigation, чтобы перейти не к предыдущему, а к предыдущему. По сути, я бы хотел, чтобы он отскочил назад на 2 позиции вместо места по умолчанию.

Я уверен, что это нетрадиционно, но сейчас мне просто нужно это сделать.

 self.navigationItem.backBarButtonItem =
    [[[UIBarButtonItem alloc] initWithTitle:@"Back"
                                      style:UIBarButtonItemStyleBordered
                                     target:nil
                                     action:nil] autorelease];

спасибо за любую помощь

Ваш Ответ

5   ответов
1

затем используйте следующий код для возврата более 1 viewController

//Get the view controller that is 2 step behind
UIViewController *controller = [nav.viewControllers objectAtIndex:nav.viewControllers.count - 2];

//Go to that controller
[nav popToViewController:controller animated:YES];
1
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(youractonEvent:] autorelease];
1

Если у вас есть три контроллера вида в NavigationController, и в настоящее время вы просматриваете контроллер третьего вида, и если вы хотите перейти на первый контроллер вида.

Попробуй это. Это проведет вас дважды назад.

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

Установите соответствующее значение вместо 0 в вашем случае.

4

Задавать:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(goBack)] autorelease];

затем создайте метод-goBack

-(void)goBack
{
   UIViewController *ctrl = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count - 2];
   [self.navigationController popToViewController:ctrl animated:YES];
}
благодарю вас! Что делать, если я хотел указать конкретный контроллер представления. Это возможно без нарушения навигационного потока? hanumanDev
1

Если вы не хотите зависеть от индекса массива, вы можете сделать что-то вроде следующего:

MyController * aMyController = nil ;
for (int i=0; i<[[self.navigationController viewControllers] count]; i++) 
{
    NSLog(@"%@",[[self.navigationController viewControllers] objectAtIndex:i]);
    if ([[[self.navigationController viewControllers] objectAtIndex:i] isKindOfClass:[MyController class]]) 
    {
        aMyController = [[self.navigationController viewControllers] objectAtIndex:i];      
    }
}           
[self.navigationController popToViewController:aMyController animated:YES];

Похожие вопросы