扩展/收缩UITableViewCell高度在iOS7中不再起作用
所以我不久前使用了这个有用的教程:它在iOS6中工作得非常好。但是现在,由于我一直在将我的一些应用程序更新到iOS7,代码无法工作。。。我不知道为什么。代码检查得很好,它记录了哪些单元格被选中,哪些单元格没有使用扩展/收缩UITableViewCell高度在iOS7中不再起作用,ios,objective-c,uitableview,ios7,Ios,Objective C,Uitableview,Ios7,所以我不久前使用了这个有用的教程:它在iOS6中工作得非常好。但是现在,由于我一直在将我的一些应用程序更新到iOS7,代码无法工作。。。我不知道为什么。代码检查得很好,它记录了哪些单元格被选中,哪些单元格没有使用NSMutableDictionary,起初我认为它只是没有在Dictionary中正确排序,但事实并非如此。我得出了一个可能的结论,那就是当苹果更新iOS时,可能会发生一些变化。下面是我的代码: 首先,我要记录单元格是否被选中。“SelectedIndex”是我的NSMutableDi
NSMutableDictionary
,起初我认为它只是没有在Dictionary中正确排序,但事实并非如此。我得出了一个可能的结论,那就是当苹果更新iOS时,可能会发生一些变化。下面是我的代码:
首先,我要记录单元格是否被选中。“SelectedIndex”是我的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
):
这在以前没有问题,但由于某些原因,现在一些细胞会膨胀,而另一些细胞不会。。。我真的不明白这一点,因为字典正在记录正确的indexPath及其值,无论是选中的还是未选中的。希望有人谁有一个类似的问题,也许可以告诉我在正确的方向?谢谢。我不知道为什么在iOS 6上这样做,但为了确保系统知道您的手机发生了变化,您应该调用
self.tableView reloadRowsAtIndexPaths:…
作为旁注,将有关选择的数据存储为一组可能更容易。布景太棒了!如果您使用NSIndexSet
,则不需要将原始整数强制转换为NSNumber
。啊,好的-实际上可能就是这样。我会试试看它是否能解决问题。我试过使用self.tableView reloadRowsAtIndexPaths:…
,但似乎没有多大区别:/。谢谢你的建议!这很奇怪。如果添加重新加载rowsatindexpaths
并删除[self.tableView beginUpdates],是否在单元格选择后调用高度索引路径:
代码>?是的,很好用。我想这是多重选择的问题。。。由于某种原因,它没有正确阅读词典的内容。。好的,我已经设法找到了一个对我来说很好的功能替代方案,因为一次只能扩展一个单元更好!我可以从下面的答案中找到结果:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if([self cellIsSelected:indexPath])
return kCellHeight * 7;
else
return kCellHeight;
}