编辑:此答案的解决方案与 iOS7 有时返回NSIndexPath
和有时返回有关NSMutableIndexPath
。这个问题与 没有真正的关系begin/endUpdates
,但希望该解决方案对其他人有所帮助。
全部 - 我在 iOS 7 上运行我的应用程序,我beginUpdates
遇到endUpdates
了UITableView
.
我有一个表格视图,需要在触摸时更改单元格的高度。下面是我的代码:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// If our cell is selected, return double height
if([self cellIsSelected:indexPath]) {
return 117;
}
// Cell isn't selected so return single height
return 58;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
ChecklistItemCell *cell = (ChecklistItemCell *)[self.tableview cellForRowAtIndexPath:indexPath];
[cell.decreaseButton setHidden:NO];
[cell.increaseButton setHidden:NO];
// Toggle 'selected' state
BOOL isSelected = ![self cellIsSelected:indexPath];
DLog(@"%@", selectedIndexes);
DLog(@"is selected: %@", isSelected ? @"yes":@"no");
// Store cell 'selected' state keyed on indexPath
NSNumber *selectedIndex = @(isSelected);
selectedIndexes[indexPath] = selectedIndex;
[tableView beginUpdates];
[tableView endUpdates];
}
beginUpdates
和endUpdates
方法的工作方式非常不一致。每次触摸时都会正确调用该didSelectRowAtIndexPath
方法(起初我以为 UI 被阻塞了),并且selectedIndexes
正确存储了交替值。问题是,有时我触摸一个表格单元格并且所有方法都被正确调用,但单元格高度没有改变。有谁知道发生了什么?