【问题标题】:Change UILabel's base class UIView to a Custom UIView?将 UILabel 的基类 UIView 更改为自定义 UIView?
【发布时间】:2014-03-25 13:53:03
【问题描述】:

众所周知UILabel的继承层次是:

UIView : UIResponder : NSObject

现在我想将层次结构中的 UIView 更改为我的 custom UIView 喜欢:

CustomView: UIResponder : NSObject

这样我的应用程序中的所有UILabels 将在其继承层次结构中拥有我的自定义 UIView

【问题讨论】:

  • 所以你希望它像UILabel -> CustomView -> UIView -> UIResponder -> NSObject???你真的想在UILabelUIView之间得到CustomView
  • @Popeye 我想要这样 - UILabel: CustomView: UIResponder: NSObject - UIView 应该替换为 CustomView
  • 很抱歉,我认为这是不可能的。我认为您不能通过更改超类来修改任何UIKits 类。如果其他人有什么要说的,我会予以纠正,但不幸的是,我认为这不能做到。
  • 你想达到什么目的?也许还有另一种方法可以实现您的目标。
  • @RoboticCat 我正在为我的应用程序实现主题颜色更改。到目前为止,我已经将 UIView(CustomView) 子类化并添加了一个 NSNotification Observer 我正在更改 backgroundColor 属性。我的应用程序中的所有 UIView 都是 CustomView 的实例。我想要的 UILabel、UITextViews、......作为 UILabel、UItextViews 继承自 UIView 我想用 CustomView 替换继承层次结构中的 UIView。像 UILabel:CustomView:UIResponder:NSObject

标签: ios objective-c cocoa-touch uiview


【解决方案1】:

这是不可能的。

但是,您可以使用类别来扩展您的课程。 类别允许您向类添加方法,但不允许更改它们。 这是一个教程: http://www.tutorialspoint.com/objective_c/objective_c_categories.htm

根据您要实现的目标,子类化 UILable 可能仍然是一种选择。你到底在做什么?

编辑:嗯,理论上可以在运行时更改对象的超类。但是,我不确定我是否真的应该向刚刚提出您问题的人推荐这个。这是相当先进的,如果可以的话,应该由确切知道自己在做什么的程序员来完成。 但是,请参阅此问题和答案: My isa-swizzling breaks KVO Dynamically change an object's superclass

【讨论】:

  • 我正在为我的应用实现主题颜色更改。到目前为止,我已经将 UIView(CustomView) 子类化并添加了一个 NSNotification Observer 我正在更改 backgroundColor 属性。我的应用程序中的所有 UIView 都是 CustomView 的实例。我想要的 UILabel、UITextViews、......作为 UILabel、UItextViews 继承自 UIView 我想用 CustomView 替换继承层次结构中的 UIView。像 UILabel:CustomView:UIResponder:NSObject
  • 好吧,对于这样的事情,我个人会选择类别。这或多或少是他们的目的。请忽略我关于在运行时更改超类的提示。答案的那一部分只是为了使其在学术上正确,而不是使其更实用:-)
  • 顺便说一句,我过去确实实现了类似的功能。为此,我实现了所有视图控制器和表视图控制器的超类。在 viewWillAppear 上,他们遍历了整个子视图层次结构。结果证明工作量比我想象的要多。该解决方案对于每个 iOS 更新都非常不稳定,并且在引入 appearances 时,其中大部分变得多余。另外,该解决方案并不是真正的 OOP,而是某种程度的“破解”,因为事实证明我不得不考虑未记录的 UIView-Subclasses。
  • 这也是我的第一选择。我正在尝试使其成为一个组件,以便可以在我的任何其他项目中使用。只是检查可能性。
猜你喜欢
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多