1

我对系统类(具体来说是 UINavigationBar)进行了子类化,以添加一些特定的功能。我一直在到处使用它,作为 UINavigationBar 的替代品。但是,现在我想用我的自定义子类替换系统框架中使用的一些 UINavigationBar,因此它们提供相同的行为。具体来说,我希望 UITabBarController 的更多视图控制器中的 UINavigationBar 成为我的类的实例。

我认为这可能是不可能的,所以我尝试在 UINavigationBar 上创建一个类别,该类别会在系统的任何地方传播。但是,我的类别需要进行一些自定义初始化和拆卸(订阅和取消订阅 NSNotificationCenter 的通知)。如果我覆盖我的类别中的 init/dealloc 方法,我将无法调用原始方法(由 UINavigationBar 实现),这可能非常危险/致命/可能不是很实用。

一种可能的解决方案是方法调配,但我不太确定如何使用它,而且它显然可能相当复杂。

如果有人能够详细说明如何实现一些可以解决我的问题的东西(或者一些关于如何使用方法调配的自定义代码),我将不胜感激。

4

1 回答 1

3

您可以使用 method_setImplementation() 函数覆盖 UINavigationBar 类上的 +allocWithZone: 方法来创建子类的实例(就像类集群的行为一样)(查看Objective-C 运行时参考以获取该函数的更多详细信息)

于 2011-08-31T13:35:28.070 回答