看一看這個線程:Hide static cells
它談論編程隱藏靜態細胞。下面是接受的答案:
1.隱藏細胞
沒有辦法直接隱藏單元格。 UITableViewController是 提供靜態單元格的數據源,目前 無法告訴它「不提供單元格x」。所以我們必須提供我們的 自己的數據源,它以 的順序委託給UITableViewController來獲取靜態單元。
最簡單的方法是繼承UITableViewController,並覆蓋所有需要在隱藏單元格時行爲不同的方法 。
在最簡單的情況下(單節表中,所有單元都具有相同 高度),這將是這樣的:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [super tableView:tableView numberOfRowsInSection:section] - numberOfCellsHidden; }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Recalculate indexPath based on hidden cells
indexPath = [self offsetIndexPath:indexPath];
return [super tableView:tableView cellForRowAtIndexPath:indexPath]; }
- (NSIndexPath*)offsetIndexPath:(NSIndexPath*)indexPath {
int offsetSection = indexPath.section; // Also offset section if you intend to hide whole sections
int numberOfCellsHiddenAbove = ... // Calculate how many cells are hidden above the given indexPath.row
int offsetRow = indexPath.row + numberOfCellsHiddenAbove;
return [NSIndexPathindexPathForRow:offsetRow inSection:offsetSection]; }
如果您的表有多個部分,或 細胞有不同的高度,你需要重寫更多的方法。 同樣的原則適用於這裏:在委託給super之前,您需要抵消indexPath,部分 和row。
記住還保持,對於像 didSelectRowAtIndexPath方法方法indexPath參數:將用於相同小區不同, 取決於狀態(即隱藏單元的數量)。所以它是 可能是一個好主意,總是抵消任何indexPath參數,並使用這些值工作 。
2.動畫已經說明的變化
至於加雷,你會得到重大錯誤,如果你使用的動畫reloadSections 變化:withRowAnimation:方法。
我發現如果你打電話給reloadData:之後立刻, 動畫被大大改善(只剩下小毛病)。動畫後表格正確顯示爲 。
所以我在做什麼是:
- (void)changeState {
// Change state so cells are hidden/unhidden
...
// Reload all sections
NSIndexSet* reloadSet = [NSIndexSetindexSetWithIndexesInRange:NSMakeRange(0, [self numberOfSectionsInTableView:tableView])];
[tableView reloadSections:reloadSet withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView reloadData]; }
如果這會有所幫助,請去那邊了投票henning77的答案。