0

我有一个带有 4 个导航控制器的选项卡式应用程序,它们都应该使用相同的 UINavigationBar(相同的颜色,相同的按钮)。现在我只想创建一次导航栏!

我的第一种方法是继承 UINavigationController,更改栏颜色和按钮,并将其用于我的 AppDelegate 中的导航控制器,但按钮没有显示,我发现文档说你不应该继承 UINavigationController ...

你能帮我吗?我在任何地方都找不到解决方案...

4

2 回答 2

0

如果您只针对 iOS 5,您可以使用外观代理,它可以让您在某一时刻为整个应用程序自定义 UI 元素。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html

如果您需要在较旧的 iOS 上执行此操作,那么没有非常好的解决方案可以执行此操作。有一种使用方法混合的方法,描述为here。

http://samsoff.es/posts/customize-uikit-with-method-swizzling

但这不再适用于 iOS 5。最好的方法是使用 iOS 5 的外观代理和一种解决方法,例如为旧 iOS 调配的方法。

编辑:

这是我发现的一些代码,如果可用,则使用外观代理,如果不可用,则使用方法调动。

if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) {
    // iOS >= 5.0 -> Use Appearance API
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]];
}
else {
    // iOS < 5.0 -> Use Method Swizzling
    Method drawRectCustomBackground = class_getInstanceMethod([UINavigationBar class], @selector(drawRectCustomBackground:));
    Method drawRect = class_getInstanceMethod([UINavigationBar class], @selector(drawRect:));
    method_exchangeImplementations(drawRect, drawRectCustomBackground);
}

drawRectCustomBackground方法是在一个类别中实现的UINavigationBar

于 2012-09-08T13:24:51.623 回答
0

启动您的主导航控制器,其中包含 4 个数组,每个数组在 NavigationBar 的每个选项卡中都有一个 NavigationController。我认为它会起作用。

希望能帮助到你,

马里奥

于 2012-09-08T14:59:25.493 回答