13

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

4

3 回答 3

21

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

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

CustomNavigationBar是通过子类化创建的自定义类UINavigationBar。您可以使用setViewControllersUINavigationController 的属性设置视图控制器。

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

在此处输入图像描述 在此处输入图像描述

于 2013-01-31T03:27:27.837 回答
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

于 2013-01-31T03:32:47.113 回答
2

在这里为您的一般子类混合本杰明梅奥的答案

- (UINavigationController *)initWithRootViewController:(UIViewController *)rootViewController  navigationBarClass:(Class)navigationBarClass {
    self = [super initWithNavigationBarClass:navigationBarClass toolbarClass:UIToolbar.class];
    if (self) {
        self.viewControllers = @[rootViewController];
    }
    return self;
}
于 2013-03-29T20:29:26.607 回答