iPhone: Как переопределить кнопку «Назад» в контроллере навигации? - PullRequest
5 голосов
/ 07 января 2011

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

Однако для одного вида, в частности, я бы хотел, чтобы кнопка «назад» не возвращалась к предыдущему виду, а для переходак одному я установил.В частности, он собирается вернуться назад к двум представлениям и пропустить одно.

Проведя некоторое исследование, я обнаружил, что могу перехватить представление, когда оно исчезает, поэтому я попытался ввести код, чтобы он перешел кстраница, которую я хотел бы:

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
//i set a flag to know that the back button was pressed
if (viewPushed) {
    viewPushed = NO;   
} else {
    // Here, you know that back button was pressed
    mainMenu *mainViewController = [[mainMenu alloc] initWithNibName:@"mainMenu" bundle:nil];
    [self.navigationController pushViewController:mainViewController animated:YES];
    [mainViewController release];
}   

}

Это не сработало, у кого-нибудь есть идеи?

Спасибо !!

Ответы [ 4 ]

12 голосов
/ 08 января 2011

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

Попробуйте это как свой код, который выполняет возврат на два уровня:

NSArray *vcs = [self.navigationController viewControllers];
[self.navigationController popToViewController:[vcs objectAtIndex:[vcs count]-3];

Или вы могли бы полностью заменить кнопку «Назад» собственной кнопкой? По вашему мнению, контроллер:

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(doSomething:)];

self.navigationItem.hidesBackButton = YES;
self.navigationItem.leftBarButtonItem = item;
[item release];

Затем вы можете написать метод doSomething: для удаления двух элементов из стека, возможно, используя код, который я разместил выше.

4 голосов
/ 08 ноября 2012

Простое решение:

- (void)viewWillDisappear:(BOOL)animated {  
    //if true, back was pressed 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {
             //your logic
    }   
}
2 голосов
/ 08 января 2011

Вы можете попробовать реализовать делегат UINavigationBarDelegate. Когда вызывается метод -navigationBar:didPopItem:, вы можете вытолкнуть дополнительный элемент из UINavigationController, и, таким образом, сразу два элемента.

0 голосов
/ 08 ноября 2012
 UIButton *home = [UIButton buttonWithType:UIButtonTypeCustom];  
UIImage *homeImage = [UIImage imageNamed:@"back.png"];  
[home setBackgroundImage:homeImage forState:UIControlStateNormal];  
[home addTarget:self action:@selector(LogOut)  
forControlEvents:UIControlEventTouchUpInside];  
home.frame = CGRectMake(0, 0, 69, 26);  
UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithCustomView:home];
[[self navigationItem] setLeftBarButtonItem:button2];
[button2 release];
button2 = nil;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...