1

Как и многие другие, я хотел бы выполнить действие, когда кнопка «назад» используется в UINavigationController. Я знаю о некоторых альтернативных подходах к этому, таких как добавление моей собственной кнопки и попытка подменить внешний вид, используя viewWillDisappear и установив теги для всех действий без обратной связи, которые приведут к исчезновению вида и т. Д.Подкласс UINavigationController - настройка Pop

Но тот, который я хотел бы попробовать, - это подклассификация UINavigationController и инъекция чего-то в popViewControllerAnimated:

Но я не могу получить простой тестовый пример для работы. Вот что я пробовал ...

Я создал новый класс CustomNavigationController, который наследуется от UINavigationController. Здесь, я обновил popViewControllerAnimated:

.h:

#import <UIKit/UIKit.h> 

@interface CustomNavigationController : UINavigationController 

@end 

.m:

#import "CustomNavigationController.h" 

@interface CustomNavigationController() 

@end 

@implementation CustomNavigationController 

- (UIViewController *)popViewControllerAnimated:(BOOL)animated{ 
    NSLog(@"pop!"); 
    return [super popViewControllerAnimated:animated]; 
} 

@end 

В интерфейсе строитель, я изменил класс навигации контроллера: enter image description here

Что мне не хватает? Я ожидаю, что «поп» будет регистрироваться всякий раз, когда я появляюсь в этом контроллере.

ответ

1

Я только что протестировал ту же самую реализацию на симуляторе iPhone 5.1, и он отлично работает - кажется, проблема в другом месте.

Я создал пустой проект из шаблона приложения одного вида и добавил класс CustomNavigationController с кодом, который вы разместили в теле вопроса. UIButton используется для подталкивания другого контроллера представления к стеку навигации (с использованием расписания раскадровки), и сообщение «POP» отправляется на консоль, как ожидалось.

enter image description here

+0

Спасибо - я просто подтвердил то же самое в тестовом проекте. Я попытаюсь отследить его в другом месте –

1

Из первого абзаца документации по адресу UINavigationController.

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

Если вам нужна такая настройка, вам лучше реализовать свой собственный контроллер стиля навигации.

+0

Я тоже это прочитал. Сейчас я просто экспериментирую. Во всяком случае, «не предназначенный» мне кажется мягким предупреждением, а не запретом. Он не говорит «не должен, потому что ...». Я также считаю, что мой собственный контроллер стиля навигации просто для регистрации «поп» может быть излишним (перевод: не знал, с чего начать). –

+4

Документация Apple в UINavigationController теперь гласит: «Этот класс обычно используется как есть, но может быть подклассифицирован в iOS 6 и более поздних версиях». –

Смежные вопросы