【发布时间】:2013-11-06 19:16:02
【问题描述】:
有没有办法在drawRect方法的自定义UIView类中添加第二个参数?
我目前正在使用 UIView 来绘制文本字符串,但文本本身是在 drawRect 方法中设置的。有没有办法以类似的方式传递文本变量
- (void) drawRect:(CGRect)rect(NSString *)text
如果没有,是否有任何替代解决方法?
谢谢
【问题讨论】:
有没有办法在drawRect方法的自定义UIView类中添加第二个参数?
我目前正在使用 UIView 来绘制文本字符串,但文本本身是在 drawRect 方法中设置的。有没有办法以类似的方式传递文本变量
- (void) drawRect:(CGRect)rect(NSString *)text
如果没有,是否有任何替代解决方法?
谢谢
【问题讨论】:
您通常会为您的UIView 子类自定义@property:
@property (nonatomic, copy) NSString *text;
您甚至可能有一个调用setNeedsDisplay 的自定义setter,这样当您设置text 属性时,视图的drawRect 将被调用,例如:
- (void)setText:(NSString *)text
{
_text = [text copy];
[self setNeedsDisplay];
}
然后,您的 drawRect 可以在需要引用 NSString 时引用 self.text。
【讨论】:
self.text 来设置setter 中的属性,因为self.text = ... 转换为[self setText:...],你会得到无限递归。您永远不应该在访问器方法本身(或在init 和dealloc 方法中)使用访问器方法(setter 和getter)。在drawRect 中,您可以根据需要使用合成的ivar _text 来检索值(这是个人喜好问题),但我总是尽可能使用getter,因为它提供了最大的灵活性可以忽略不计的开销。