2011-01-11 109 views
0

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

-(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中,并且应该是可点击的。不是这样。我用另一种观点来解决问题,但是在那个观点上我发表了观点。 任何想法?

回答

6

你做希望可以创造一个新的UIWebView并添加它作为一个子视图每次调用drawRect:这是一个非常坏主意:

  1. 这将是缓慢的。那些是沉重的物体,而且你正在创造数以千计的物体。
  2. 你没有摆脱旧的UIWebView对象。所以你基本上将成千上万的数据层叠在一起。

你应该创建UIWebView一次,大概在初始化,或其他一些方法只调用一次。您还应该将其作为子视图添加一次。

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

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

1

这是错误的。你不应该在-drawRect里面实例化UIWebView: - 这可能会被重复地调用来刷新屏幕。

相反,您至少应该创建一个UITableViewCell的子类并添加一个UIWebView来保存所有文本。

即便如此,UIWebView可能太重,无法放置在每个单元格中。

你可能想检查this了。

相关问题