我有一个带有4个navControllers的标签式应用程序,它们都应该使用SAME UINavigationBar(颜色相同,按钮相同)。现在我只想创建一次导航栏!
我的第一种方法是继承UINavigationController,更改条形颜色和按钮,并将其用于我的AppDelegate中的navControllers,但按钮没有显示,我发现文档说你不应该继承UINavigationController ......
你可以帮帮我吗?我无法在任何地方找到解决方案...答案 0 :(得分:0)
如果您只定位iOS 5,则可以使用外观代理,这样您就可以在整个应用程序的某个位置自定义UI元素。
如果您需要在较旧的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的每个标签。我认为它会奏效。
希望它有所帮助,
<强>马里奥强>