Как я могу получить ссылку на текущий UINavigationController?

В Objective-C, каков наилучший способ получить ссылку на текущий UINavigationController? Я хотел бы получить доступ к нему из любого класса, у которого может не быть ссылки на UIController, делегат или что-то еще.

Существует ли существующий способ получить текущий UINavigationController? Должен ли я добавить что-то в свой делегат приложения и получить это?

Ответ 1

Как выясняется, вы можете получить его, хотя и с небольшим количеством точечного синтаксиса, от любого потомка UIView/UIViewController.

self.(view).window.rootViewController.navigationController;

Если вы используете объект, который спускается из любого другого класса, то это же верно, за исключением того, что вы должны пройти через UIApplication

[UIApplication sharedApplication].keyWindow.rootViewController.navigationController;

Конечно, оба из них сильно разрывают MVC, и определенно рекомендуется добавить в контроллер корневого представления любую логику, которая должна коснуться "контроллера навигации по умолчанию".