Как обрабатывать нажатие backBarButtonItem?
Я почти сделал это во всех приложениях, но у меня есть 3 представления, сложенные в navigationController, и мне нужно перейти от третьего вида к первому. Как я понимаю, я могу сделать это только через viewWillDisappear. Но если я попробую этот "прыжок", я получу панель navigationController из второго окна View с кнопками навигации, которые вызывают исключения / ошибки.
PS Не советуйте мне сделать левый BarButtonitem похожим на backBarButtonItem. Это слишком сложно, и я не знаю, где найти подходящее изображение для него.
2 ответа
Насколько мне известно, у вас нет выбора, кроме как предоставить свой собственный UIBarButtonItem
, Вам не разрешают прерывать, как UINavigationController
работает по умолчанию. То есть вы не можете переопределить поведение кнопки "назад". Вы должны предоставить пользовательский элемент кнопки панели и установить его в качестве элемента кнопки левой панели элемента навигации.
(Как примечание: искомый тип поведения может указывать на плохой шаблон навигации. Кнопки "Назад" почти всегда должны последовательно выходить из иерархии навигации.)
Допустим, в порядке навигации ваши представления сложены как top -> 3 -> 2 -> 1 . Когда вы находитесь в этой позиции, у вас может быть флаг в делегате приложения, который показывает, что вы будете использовать doublePop при нажатии кнопки BackButton, как показано ниже: (Вы делаете это всякий раз, когда появляется третье представление в указанном вами порядке)
MyApplicationDelegate * del = [[UIApplication sharedApplication]delegate];
del.doublePopEnabled = YES;
[del release];
По мнению 2:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
MyApplicationDelegate * del = [[UIApplication sharedApplication]delegate];
if(del.doublePopEnabled){
//Asssuming you have a reference to your navigationController in your view 2
del.doublePopEnabled = NO;
[del.release]
//Use animated as no if you don't want user to see doublePopping.
self.navigationController popViewControllerAnimated:NO];
}
}
Надеюсь, поможет.