0

所以我不久前使用了这个有用的教程:http: //locassa.com/animate-uitableview-cell-height-change/,它在 iOS6 中运行良好。但是现在,由于我一直在将我的一些应用程序更新到 iOS7,所以代码不起作用......我不知道为什么。代码检查得很好,它记录了哪个单元格被选中,哪个单元格一开始没有使用NSMutableDictionary,虽然它只是没有正确地对字典中的选择进行排序,但事实并非如此。我得出的可能结论是,当 Apple 更新他们的 iOS 时,它可能会发生变化。这是我的代码如下:

首先,我正在记录单元格是否被选中 '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;

}

这以前没有任何问题,但由于某种原因,现在一些单元格会扩展而其他单元格不会......我真的不明白,因为字典正在记录正确的 indexPath 及其值,选择或未选择。希望有类似问题的人能够指出我正确的方向?谢谢。

4

1 回答 1

1

我不确定为什么这在 iOS 6 上按原样工作,但要确保系统知道您的单元格发生变化,您应该调用self.tableView reloadRowsAtIndexPaths:...

于 2013-09-27T09:33:43.247 回答