2013-04-09 76 views
1

我有一個UITableView,其中的行可以動態更新它們的高度。我有以下的方法作爲一個UITextView在UITableView中的每個單元的委託:UITableView和heightForRowAtIndexPath的偶爾問題

-(void)textViewDidChange:(UITextView *)textView 
{ 
[self resizeRow]; 
[self setNeedsDisplay]; 
[table beginUpdates]; 
[table endUpdates]; 
} 

這種方法工作正常更新表視圖行高爲文字添加到文字視圖。當我更新單元格中的UIImageView以增加其大小時,會出現問題。這需要調整表格中單元格的高度,該表格的高度可以正常工作,但從此時起,只要調用了該塊,表格視圖的heightForRowAtIndexPath就不再被調用。我沒有收到任何錯誤或警告,也不知道代碼中的其他位置。我的問題是,heightForRowAtIndexPath應該在調用[table begineUpdates][table endUpdates]塊時總是被調用,或者有沒有發生這種情況,如果是的話,它們是什麼?

+0

我也有過這樣的問題,但每當顯示tableView時會調用heightForRowAtIndexPath,begin和endUpdates是否會觸發cellForRowAtIndexPath或indexPathsForVisibleRows委託方法? – 2013-04-09 12:52:17

回答

1

發現問題。有一個虛假的[table endUpdates];調用隱藏在方法中。這顯然是以某種方式使[table beginUpdates];[table endUpdates];不同步。現在感覺更快樂了。

0

answer可能會幫助你,但一般heightForRowAtIndexPath將被調用一次,當細胞第一次顯示或呼籲reloadRowsAtIndexPaths:withRowAnimation。從單元打出該呼叫可能很尷尬,但是,由於單元不知道它的indexPath,但是您可以使用indexPathForCell:的呼叫獲得indexPath

+0

謝謝,我的備份計劃是做一些像[table reloadData];並不斷調整單元格的選定範圍,使其保持聚焦狀態。這顯然會很慢,儘管如此,如果我只能得到reloadRowsAtIndexPaths:withRowAnimation的工作,可能會損害性能少一點。 – 2013-04-09 14:47:29