iOS与所有UINavigationControllers相同的UINavigationBar

时间:2012-09-08 12:51:49

标签: iphone ios uinavigationcontroller uinavigationbar

我有一个带有4个navControllers的标签式应用程序,它们都应该使用SAME UINavigationBar(颜色相同,按钮相同)。现在我只想创建一次导航栏!

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

你可以帮帮我吗?我无法在任何地方找到解决方案...

2 个答案:

答案 0 :(得分:0)

如果您只定位iOS 5,则可以使用外观代理,这样您就可以在整个应用程序的某个位置自定义UI元素。

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

如果您需要在较旧的iOS上执行此操作,那么没有非常好的解决方案来执行此操作。有一种方法使用方法调配,这里描述。

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上的类别中实现。

答案 1 :(得分:0)

启动主导航控制器,里面有4个阵列,每个阵列里面都有一个NavigationController用于NavigationBar的每个标签。我认为它会奏效。

希望它有所帮助,

<强>马里奥