使用UINavigationController的initWithNavigationBarClass的正确方法:toolbarClass:

时间:2013-01-31 03:24:43

标签: ios

从apple docs我了解到UiNavigationController可以使用initWithNavigationBarClass:toolbarClass:方法与另一个Uinavigationbar实例化。如何通过自定义UiNavigationBar子类和IB正确地做到这一点?

3 个答案:

答案 0 :(得分:19)

您可以像这样使用它来初始化导航控制器,

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

此处CustomNavigationBar是由子类UINavigationBar创建的自定义类。您可以使用UINavigationController的setViewControllers属性设置viewcontrollers。

如果您想在IB中执行此操作,请尝试此操作。从对象中选择导航栏,在身份检查器中,选择导航栏的自定义类。

enter image description here enter image description here

答案 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;
}