没有子类化的重载方法(特别是drawRect:)

Posted

技术标签:

【中文标题】没有子类化的重载方法(特别是drawRect:)【英文标题】:Overload method (specifically drawRect:) without subclassing 【发布时间】:2009-10-27 02:11:30 【问题描述】:

我正在使用容器 UIView 来容纳 UIImageView 并进行一些自定义绘图。在这一点上,我想在我的子视图之上做一些绘图。所以覆盖 drawRect: 在我的容器中 UIView 只会在子视图下方绘制。

有没有办法在我的子视图中重载drawRect:而不对其进行子类化?

我认为方法调配可能是答案,但我希望不是。

(注意:是的,让 UIView 成为 UIImageView 的子视图会更聪明,但不幸的是我现在犯了我的错误。)

【问题讨论】:

【参考方案1】:

你确定你的意思是重载而不是覆盖吗?

重载——创建一个基本名称相同但参数不同的新方法,因此选择器不同——可以通过将包含新方法的新方法类别添加到现有类来完成。

重写——修改现有方法的行为——需要在运行时对类的方法表进行猴子修补(例如,通过调配)或子类化。

【讨论】:

感谢您的澄清。覆盖绝对是我需要的,因为 drawRect: 从不直接调用。

以上是关于没有子类化的重载方法(特别是drawRect:)的主要内容,如果未能解决你的问题,请参考以下文章

我正在使用 drawRect 实现 UIView 子类:如何绘制按钮?

关于重写和重载

加速 -drawRect: UIView 子类的方法

java中方法的重载和覆盖分别要满足的条件

stackview

Live Xcode 的 Interface Builder UIView 子类 (IB_DESIGNABLE) 没有 drawRect: