Ios 自定义drawRect:参数

Ios 自定义drawRect:参数,ios,drawrect,Ios,Drawrect,有没有办法在drawRect方法的自定义UIView类中添加第二个参数 我目前正在使用UIView绘制文本字符串,但文本本身是在drawRect方法中设置的。是否有任何方法可以像这样传入文本变量 - (void) drawRect:(CGRect)rect(NSString *)text 如果没有,还有其他的解决办法吗 谢谢对于UIView子类,您通常会有一个自定义的@属性: @property (nonatomic, copy) NSString *text; 您甚至可能有一个调用setN

有没有办法在drawRect方法的自定义UIView类中添加第二个参数

我目前正在使用UIView绘制文本字符串,但文本本身是在drawRect方法中设置的。是否有任何方法可以像这样传入文本变量

- (void) drawRect:(CGRect)rect(NSString *)text
如果没有,还有其他的解决办法吗


谢谢

对于
UIView
子类,您通常会有一个自定义的
@属性

@property (nonatomic, copy) NSString *text;
您甚至可能有一个调用
setNeedsDisplay
的自定义setter,这样当您设置
text
属性时,将调用视图的
drawRect
,例如:

- (void)setText:(NSString *)text
{
    _text = [text copy];
    [self setNeedsDisplay];
}

当您的
drawRect
需要引用该
NSString

时,它可以引用
self.text

嗨,Rob,在setter中您使用了(u text)但是在drawRect中您将其称为self.text,我可以知道您为什么这样做吗?谢谢,太好了,谢谢!我应该想到这一点。在将自定义视图添加为子视图之前,我使用了该属性,然后在我的视图控制器中设置了文本。@Unheilig关键的观察是,您不应该在setter中使用
self.text
来设置该属性,因为
self.text=…
转换为
[self-setText:…]
,并且您将得到无限递归。在访问器方法本身(或
init
dealoc
方法中)中,不应使用访问器方法(setter和getter)。在
drawRect
中,您可以使用合成的ivar,
\u text
,来检索您想要的值(这是个人偏好的问题),但我总是尽可能使用getter,因为它以可以忽略不计的开销提供了最大的灵活性。@Unheilig《高级内存管理编程指南》的一节概述了应该和不应该使用访问器方法的地方。@Rob非常好的解释。是的,这是一个递归。谢谢