2011-01-11 105 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了。

相關問題