2013-09-27 36 views
0

工作所以我用這個有用的教程而回:http://locassa.com/animate-uitableview-cell-height-change/,它是在iOS6的完美的工作。但是現在,因爲我已經將一些應用程序更新到iOS7,所以代碼不起作用......我不知道爲什麼。代碼檢查正常,它記錄哪些單元格已被選中,哪些在開始時並未使用NSMutableDictionary雖然它只是沒有正確排序字典中的選擇,但事實並非如此。我已經得出了可能的結論,即蘋果更新iOS時可能會有所改變。這裏是我下面的代碼:擴張/收縮的UITableViewCell高度不再iOS7

首先,我記錄單元格是否選擇了「selectedIndexes」是我NSMutableDictionary

- (BOOL)cellIsSelected:(NSIndexPath *)indexPath { 
// Return whether the cell at the specified index path is selected or not 
NSNumber *selectedIndex = [selectedIndexes objectForKey:indexPath]; 
return selectedIndex == nil ? FALSE : [selectedIndex boolValue]; 
} 
我didSelect方法

然後:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath 
{ 
BOOL isSelected = ![self cellIsSelected:indexPath]; 
    if ([self cellIsSelected:indexPath]) { 
//hide objects that are in expanded area of cell 
}else { 
//load objects as cell is selected 
} 
// Store cell 'selected' state keyed on indexPath 
    NSNumber *selectedIndex = [NSNumber numberWithBool:isSelected]; 
    [selectedIndexes setObject:selectedIndex forKey:indexPath]; 
    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 

所以現在我設置什麼,我想,當所選單元格,我定義我的期望高度(kCellHeight)發生:

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

if([self cellIsSelected:indexPath]) 
    return kCellHeight * 7; 
else 
    return kCellHeight; 

} 

這現在沒有probelsm合作過,但由於某種原因,一些細胞會膨脹,別人也不會......我真的不明白,因爲字典登錄正確的indexP ath及其值,選擇或不選。希望有類似問題的人能夠指引我朝着正確的方向發展?謝謝。

+0

作爲一個側面說明,它可能是更容易儲存關於作爲一組的選擇的數據。集合非常棒!如果您使用'NSIndexSet',則不需要將基本整數轉換爲'NSNumber'。 –

回答

1

我不知道爲什麼它工作,因爲,是在iOS 6,但要確保系統知道你的改變你應該叫self.tableView reloadRowsAtIndexPaths:...

+0

啊,好的 - 這可能是真的。我會嘗試一下,看看它是否能解決問題。 – Oliver

+0

我試過使用'self.tableView reloadRowsAtIndexPaths:...'但它似乎沒有太大的區別:/。還是)感謝你的建議! – Oliver

+0

這很奇怪。如果添加'reloadRowsAtIndexPaths'並移除'[self.tableView beginUpdates];''''''''''單元格選擇後會調用'heightForRowAtIndexPath:'嗎? –