Из документов apple я понимаю, что UiNavigationController может быть создан с помощью другого Uinavigationbar с использованием метода initWithNavigationBarClass: toolbarClass:. Как правильно это сделать с помощью пользовательского подкласса UiNavigationBar и IB?
Правильный способ использования UINavigationController initWithNavigationBarClass: toolbarClass:
Ответ 1
Вы можете использовать его так, чтобы инициализировать контроллер навигации,
UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[CustomNavigationBar class] toolbarClass:nil];
Здесь CustomNavigationBar
- это пользовательский класс, созданный подклассом UINavigationBar
. Вы можете установить viewcontrollers, используя свойство setViewControllers
UINavigationController.
Если вы хотите сделать это в IB, попробуйте это. Выберите панель навигации из объектов и в инспекторе идентификации, выберите пользовательский класс для панели навигации.
Ответ 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;
}