在drawRect方法中绘制时可以访问视图吗?

Gia*_*Pac 0 iphone core-graphics objective-c uiwebview drawrect

在创建tableViewCell的内容视图时,我在drawRect中使用了drawInRect:withFont,drawAtPoint ......等等,因为我需要的只是放置一些文本.事实证明,所绘制文本的一部分需要是可点击的URL.所以我决定创建一个UIWebView并将其插入到我的drawRect中.一切似乎都很好,问题是没有发生与UIWebView的交互.我尝试启用交互,没有用.我想知道,因为使用drawRect:我正在绘制当前的图形上下文,我可以做些什么来让我的子视图与用户交互?
这是我在UITableViewCell类中使用的一些代码.

-(void) drawRect:(CGRect)rect{  
    NSString *comment = @"something";
    [comment drawAtPoint:point forWidth:195 withFont:someFont lineBreakMode:UILineBreakModeMiddleTruncation];

    NSString *anotherCommentWithURL = @"this comment has a URL http://twtr.us";
    UIWebView *webView = [[UIWebView alloc] initWithFrame:someFrame];
    webView.delegate = self;
    webView.text = anotherCommentWithURL;
    [self addSubView:webView];
    [webView release];
}
Run Code Online (Sandbox Code Playgroud)

正如我所说,视图很好,但是没有与外部的webView交互.URL嵌入到HTML中,应该是可点击的.它不是.我让它在另一个视图上工作,但在那个视图上我提出了看法.有任何想法吗?

Cra*_*tis 6

希望创建新的UIWebView并将其添加为每个调用的子视图.drawRect:这是一个非常糟糕的主意:

  1. 这会很慢.那些是重物,你创造了成千上万的物体.
  2. 你没有摆脱旧UIWebView物体.所以你基本上将成千上万的它们叠加在一起.

您应该创建UIWebView 一次,可能在初始化程序中,或者只调用一次的其他方法.您还应该只将其添加为子视图一次.

创建数千个这些视图的行为肯定会导致您的问题.

如果你的视图正在改变位置/大小,那么你可以覆盖setFrame:并且除了调用超类的方法之外,调整UIWebView你肯定想要作为实例变量维护的框架.