Поймать действие кнопки возврата UINavigationController - PullRequest
3 голосов
/ 04 ноября 2011

Есть много вопросов о переопределении действия кнопки «Назад» контроллера навигации, но все говорят, что прямого способа сделать это нет. Я реализовал это, унаследовав UINavigationController и переопределив метод UINavigationBarDelegate. Но проблема в том, что интерфейс UINavigationController не реализует протокол UINavigationBarDelegate (но он реализует этот метод, потому что этот код работает :), и я боюсь, что приложение будет отклонено Apple, учитывая, что здесь используется недокументированный API.

Итак, вопрос: как вы думаете, это частное использование API или нет? Вот код:

@interface CustomNavigationController : UINavigationController <UINavigationBarDelegate>

@end

@implementation CustomNavigationController

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
    BOOL shouldPop = [[self topViewController] enableBackButton]; // every view controller overrides this method to disable or enable pop of view controller
    if (shouldPop) {
        //here is the warning about "UINavigationController may not respond to selector"
        return [super navigationBar:navigationBar shouldPopItem:item];
    } else {
        return NO;
    }
}

@end

1 Ответ

1 голос
/ 05 ноября 2011

Документация Apple по UINavigationController: этот класс не предназначен для создания подклассов.

Хотя это намерение не является запретом и технически не может вас отвергнуть (использование не похоже на ссылкулюбые частные API), это должно повлиять на ваше дизайнерское решение.Вы, вероятно, унаследуете неожиданное поведение сейчас или потенциально в будущем (если что-то изменится с внутренностями суперкласса).Контроллеры навигации удобны, но в зависимости от того, что вам нужно, вам может быть лучше просто развернуть свой собственный.

Одной из альтернатив может быть использование стандартного контроллера навигации, но установите для его свойства navigationBar значение скрытое.Затем вы можете спроектировать и включить свою собственную панель навигации в XIB с любыми кнопками, нацеленными на любые действия, которые вы хотите (например, кнопкой возврата, просто вызывающей popViewController).

РЕДАКТИРОВАТЬ: создание подклассов UINavigationController больше не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...