Правильный способ использования UINavigationController initWithNavigationBarClass: toolbarClass:

Из документов apple я понимаю, что UiNavigationController может быть создан с помощью другого Uinavigationbar с использованием метода initWithNavigationBarClass: toolbarClass:. Как правильно это сделать с помощью пользовательского подкласса UiNavigationBar и IB?

Ответ 1

Вы можете использовать его так, чтобы инициализировать контроллер навигации,

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[CustomNavigationBar class] toolbarClass:nil];

Здесь CustomNavigationBar - это пользовательский класс, созданный подклассом UINavigationBar. Вы можете установить viewcontrollers, используя свойство setViewControllers UINavigationController.

Если вы хотите сделать это в IB, попробуйте это. Выберите панель навигации из объектов и в инспекторе идентификации, выберите пользовательский класс для панели навигации.

enter image description hereenter image description here

Ответ 2

В интерфейсе Builder вы нажмете на панель навигации внутри навигационного контроллера. Осмотрите его на правой панели и измените пользовательский класс с UINavigationBar на свой собственный подкласс.

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

// This code assumes `MyCustomNavigationBar` is the name of your custom subclass, and that `viewController` is a UIViewController object created earlier.

// To create the containing navigation controller
UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyCustomNavigationBar class] toolbarClass:[UIToolbar class]];

// To set the root view controller in the navigation controller
navigationController.viewControllers = @[viewController];

Код выше информирует UIKit о создании UINavigationController с навигационными полосами подкласса MyCustomNavigationBar. Затем он устанавливает контроллер корневого представления в объект, хранящийся в переменной viewController.

Ответ 3

Просто затирая Бенджамина Майо, ответьте здесь для вашего общего подкласса

- (UINavigationController *)initWithRootViewController:(UIViewController *)rootViewController  navigationBarClass:(Class)navigationBarClass {
    self = [super initWithNavigationBarClass:navigationBarClass toolbarClass:UIToolbar.class];
    if (self) {
        self.viewControllers = @[rootViewController];
    }
    return self;
}