我想實現擴展UITableViewCells
我完全控制從摺疊到展開和返回的過渡動畫。 我有一個數組,cellDataList
,持有的我UITableViewCells
的狀態,即height
,color
,data
,isExpanded
等更多控制更新UITableView和UITableViewCell
我實現:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath == selectedIndex)
return expandedHeight;
return collapsedHeight;
}
和我實現:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
/*
some logic that tests if the indexPath is already selected,
which will collapse the cell, if a previous cell needs to be collapsed before the
new expands etc.
*/
[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationNone];
[tableView endUpdates];
}
我的手機是一個自定義UITableViewCell
我在那裏建立我的內容drawRect:
cell有一個UIView
(背景),用作單元格的自定義背景,我希望這個視圖可以
將動畫從摺疊到展開和返回,而不僅僅是一個「跳躍」中的setFrame,就像現在一樣。
我真的不知道在哪裏'截取'tableView更新鏈,來實現這一點。
當我做了上面的[tableView beginUpdates] - [tableView endUpdates]
,它開始變得模糊不清。 我認爲
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
被稱爲更新細胞 在指定的索引。這又會詢問heightForCellAtIndexPath
哪個高度來設置單元格。如果我在定製單元設置一個斷點setFrame:
方法 我可以看到來電是
[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:]().
此設置單元格的新幀,那麼我想[cell setNeedsDisplay]
以某種方式調用,所以電池可以使所提供的框架。 [cell setNeedsDisplay]
最終會調用我的自定義drawRect:
並呈現單元格的內容。這個按預期工作,但我不知道在哪裏以及如何爲我的背景設置動畫框架,也是以某種方式進行動畫,所以只有在單擊時纔會完成,並且不是每次調用setFrame:
(在滾動等過程中)。 當我做了上面的tableView動畫,爲新的單元格大小騰出空間,這是我想用我的單元格上的背景視圖「模仿」這個動畫的 。
我在Tweetbot和路徑等應用程序中看到了這種效果,但似乎無法複製它。
希望有人可以幫助我在正確的方向,謝謝:)
感謝你,真的很短的版本是「有沒有一種方法來創建一個uitableviewcells高度的動畫,這樣它就可以與uitableviews動畫同步,在它旁邊移動,爲一個新大小的單元騰出空間」。你提供的代碼在哪裏去?控制器,customcell或tableview? – RickiG 2011-06-12 09:07:23
你應該在tableView中動態改變你的單元格的高度,但是之後你需要重新加載你的表格。嘗試調試您的代碼以檢查它是否涉及到您的新高度值。但是,一旦不改變這一點,你就編寫自定義單元格。在您的控制器部件中,訪問您的自定義單元並更改其高度,然後重新加載表格。 – 2011-06-12 11:05:12