【发布时间】:2015-09-30 22:31:00
【问题描述】:
在我的应用程序中,我有几个不同的 UIView 子类:UIDatePicker、UIPicker、UIButton、UITableView、UITableViewCell、UITextView 等...对于其中的每一个,我想添加一个非常简单的 drawRect 自定义实现,我工作得很好。
有没有一种简单的方法可以让 UIView 的多个子类都具有相同的 drawRect 实现,而无需创建子类并在每个 UIPicker、UIButton 等之间重复相同的代码......?
我意识到解决这个问题的方法可能是为 UIView 的 layer 属性编写一个委托类并在 drawLayer 中进行自定义绘图,但我想在重新编写代码之前我会问一下。
【问题讨论】:
-
仅供参考 - 您不应该修改任何自定义 UI 小部件的
drawRect:方法。 -
我很好奇您如何为这些不同的 UI 元素使用完全相同的绘图代码。
-
@rmaddy 我很好奇你的意思。 UIView 及其子类中 drawRect 的自定义实现是 Cocoa/Objective-C 的支柱之一,如果你想添加任何东西到类如何绘制自身。 developer.apple.com/library/ios/documentation/UIKit/Reference/…:
-
是的,如果不错的话,为您的自己的自定义视图实现
drawRect:。但是 Apple 提供的小部件应该是具有私有视图层次结构的黑盒子。您不应该弄乱提供的小部件的绘制方式。 -
您可以通过 swizzling 在语言级别执行此操作。祖先类中的类别破坏者,除了是一种可怕的、糟糕的、无神论的、可怕的做法之外,将无法工作,因为中间的子类可能有自己的实现。唯一的其他基于语言的选项是您提到的那个:您自己的子类就在您的自定义类之上和最后一个框架类之下,但是我又不确定这实际上是否可行,因为您提到的一些类是@987654324 @s 和其他
UIView的直系后代。
标签: ios objective-c uiview drawrect