2010-10-28 100 views
2

我試圖得到高度可變的表格單元格執行,我認爲將是一個完美的解決方案橫空出世成遞歸/堆棧溢出:如何在tableView中獲取表格目標單元格:heightForRowAtIndexPath:?

- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    MyCustomCell *cell = (MyCustomCell *)[aTableView cellForRowAtIndexPath:indexPath]; 

    return [cell heightForObject:...]; // passing data object on indexPath 
} 

表中的所有單元格標籤和其他視圖屬性在創建初始化時間(以通常的tableView:cellForRowAtIndexPath:方式)。因此,我的想法是,我可以將高度特定的計算從表控制器移動到我這樣的自定義單元實現。我可以在其他表格控制器中使用相同的單元格,而無需任何代碼重複。 heightForObject:可以看看它的子視圖,他們正在使用什麼字體,並從中建立高度值。哎呀,我甚至可以改變某些單元格標籤的字體大小,理論上他們應該正確更新它們的高度。

所以正如前面提到的 - 我正在用這段代碼來解決堆棧溢出問題。我將如何去獲取被稱爲tableView:heightForRowAtIndexPath:的目標單元格?

+0

我只是想對自己說,這可能是UITableView中如何管理它的細胞的結果。就像向下滾動表格一樣,它會釋放先前的單元格對象,當你再次向上滾動時,它將使用'tableView:cellForRowAtIndexPath:'重新創建它們。所以這意味着它有可能要求單元格高度,即使單元格當前還沒有被分配/初始化(例如,如果你在表格底部)。我希望有一種方法可以在計算高度時讀取實際的單元屬性/配置。 – Sim 2010-10-28 14:39:05

+0

問題在於您診斷;本質上,表格希望能夠顯示單元格8000,而不必將單元格0-7999保存在內存中,並知道它在列表中有多遠。這不是一個糟糕的API設計,它受到約束條件的特殊要求。如果你有八種類型的單元格,那麼你可以在初始化時加載一次NIB,將其高度存儲在某個地方,然後使用任何邏輯來確定索引的單元格類型以獲取tableView:heightForRowAtIndexPath:的相關值。 – Tommy 2010-10-28 16:23:05

回答

0

所以你想獲得選定的單元格?

然後寫:

UITableViewCell *actCell = [self.tableView cellForRowAtIndexPath: 
              [self.tableView indexPathForSelectedRow]]; 
相關問題