在创建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];
}
正如我所说,视图很好,但是没有与外部的webView交互。 URL嵌入到HTML中,应该是可点击的。它不是。我让它在另一个视图上工作,但在那个视图上我提出了看法。 有什么想法吗?
答案 0 :(得分:6)
您不想要创建新的UIWebView
并将其作为每次调用的子视图添加到drawRect:
这是极坏主意:
UIWebView
对象。所以你基本上将成千上万的它们叠加在一起。你应该创建UIWebView
一次,可能在初始化程序中,或者只调用一次的其他方法。您还应该只将其添加为子视图一次。
创建数千个视图的行为肯定会导致您的问题。
如果您的视图正在更改位置/大小,那么您可以覆盖setFrame:
,并且除了调用超类'方法之外,还要调整UIWebView
的框架,您肯定要维护它作为实例变量。
答案 1 :(得分:1)
这是错误的。你不应该在-drawRect中实例化UIWebView: - 可能会反复调用它来刷新屏幕。
相反,你应该至少创建一个UITableViewCell的子类,并添加一个UIWebView来保存你的所有文本。
即便如此,UIWebView可能太重了,不能放在每个单元格中。
您可能需要检查this。