我有一个带有 4 个导航控制器的选项卡式应用程序,它们都应该使用相同的 UINavigationBar(相同的颜色,相同的按钮)。现在我只想创建一次导航栏!
我的第一种方法是继承 UINavigationController,更改栏颜色和按钮,并将其用于我的 AppDelegate 中的导航控制器,但按钮没有显示,我发现文档说你不应该继承 UINavigationController ...
你能帮我吗?我在任何地方都找不到解决方案...
我有一个带有 4 个导航控制器的选项卡式应用程序,它们都应该使用相同的 UINavigationBar(相同的颜色,相同的按钮)。现在我只想创建一次导航栏!
我的第一种方法是继承 UINavigationController,更改栏颜色和按钮,并将其用于我的 AppDelegate 中的导航控制器,但按钮没有显示,我发现文档说你不应该继承 UINavigationController ...
你能帮我吗?我在任何地方都找不到解决方案...
如果您只针对 iOS 5,您可以使用外观代理,它可以让您在某一时刻为整个应用程序自定义 UI 元素。
如果您需要在较旧的 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
。
启动您的主导航控制器,其中包含 4 个数组,每个数组在 NavigationBar 的每个选项卡中都有一个 NavigationController。我认为它会起作用。
希望能帮助到你,
马里奥