如何以编程方式为UINavigationController子类化UINavigationBar? [英] How to subclass UINavigationBar for a UINavigationController programmatically?

查看:95
本文介绍了如何以编程方式为UINavigationController子类化UINavigationBar?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用自定义drawRect函数在iOS4中的应用程序上绘制 UINavigationBar ,它不使用图像,只使用CoreGraphics。

I'm using a custom drawRect function to draw on UINavigationBar across my application in iOS4, it doesn't use images, only CoreGraphics.

由于您无法在iOS5中的 UINavigationBar 类别中实现drawRect,Apple建议继承 UINavigationBar

Since you can't implement drawRect in UINavigationBar category in iOS5, Apple is suggesting to subclass UINavigationBar.

如何用我的子类替换 UINavigationBar UINavigationController (当它只读取 navigationBar 属性时,它将与iOS4和iOS5兼容)

How is it possible to replace the UINavigationBar with my subclass in UINavigationController (so it'll be compatible with iOS4 and iOS5) when the navigationBar property is read only?

@property(nonatomic, readonly) UINavigationBar *navigationBar

我根本不在我的应用程序中使用XIB,因此向NIB添加 UINavigationBar 并通过InterfaceBuilder更改类是不是一个选项。

I'm not using XIBs in my application at all, so adding a UINavigationBar to a NIB and changing the class via InterfaceBuilder is not an option.

推荐答案

从iOS6开始,现在很容易实现,而不会通过使用 UINavigationControllers 方法 initWithNavigationBarClass:toolbarClass:

As of iOS6, this is now quite simple to accomplish without swizzling or messing with other classes by using UINavigationControllers method initWithNavigationBarClass:toolbarClass:

- (id)initWithNavigationBarClass:(Class)navigationBarClass 
                    toolbarClass:(Class)toolbarClass;

来自文档:


初始化并返回一个新创建的导航控制器,
使用您的自定义栏子类。

Initializes and returns a newly created navigation controller that uses your custom bar subclasses.

为iOS6更新了答案。

这篇关于如何以编程方式为UINavigationController子类化UINavigationBar?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆