从apple docs我了解到UiNavigationController可以使用initWithNavigationBarClass:toolbarClass:方法与另一个Uinavigationbar实例化。如何通过自定义UiNavigationBar子类和IB正确地做到这一点?
答案 0 :(得分:19)
您可以像这样使用它来初始化导航控制器,
UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[CustomNavigationBar class] toolbarClass:nil];
此处CustomNavigationBar
是由子类UINavigationBar
创建的自定义类。您可以使用UINavigationController的setViewControllers
属性设置viewcontrollers。
如果您想在IB中执行此操作,请尝试此操作。从对象中选择导航栏,在身份检查器中,选择导航栏的自定义类。
答案 1 :(得分:6)
在Interface 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
中的对象。
答案 2 :(得分:2)
在这里为你的一般子类
捣乱Benjamin Mayo的答案- (UINavigationController *)initWithRootViewController:(UIViewController *)rootViewController navigationBarClass:(Class)navigationBarClass {
self = [super initWithNavigationBarClass:navigationBarClass toolbarClass:UIToolbar.class];
if (self) {
self.viewControllers = @[rootViewController];
}
return self;
}