我有一个表格视图,根据表格是否正在编辑,单元格的构建方式不同。具体来说,在编辑模式下选择样式为none,在不在编辑模式时为蓝色。
当我从一个转换到另一个时,我发现有些单元格没有更新。快速的日志记录告诉我,即使单元格的外观变化很大(例如正确添加/删除了附件视图),表格视图也不会刷新选择样式(也不是文本)。
这里发生了什么?调用setEditing时是否只更新了单元格的某些属性?大概只有那些具有允许分配单独视图样式的特定方法的人(例如EditingAccessoryType)?我想我会受益于EditingSelectionStyle。
我该如何解决?通过自定义setEditing来更改每个单元格的selectionStyle?我甚至不确定如何迭代表视图来执行此操作。由于我正在使用一些动画,reloadData不是一个选项。
答案 0 :(得分:6)
我发现自定义setEditing:遍历可见单元格并为每个单元设置selectionStyle以使其正常工作。
- (void)setEditing:(BOOL)editing animated:(BOOL)animated{
[super setEditing:editing animated:animated];
for (UITableViewCell *cell in [self.tableView visibleCells]) {
NSIndexPath *path = [self.tableView indexPathForCell:cell];
cell.selectionStyle = (self.editing && (path.row > 1 || path.section == 0)) ? UITableViewCellSelectionStyleNone : UITableViewCellSelectionStyleBlue;
}
}
答案 1 :(得分:2)
如果查看UITableViewDelegate documentation,您会看到有五种方法可以自定义编辑行为。还有方法
- (BOOL)tableView:(UITableView *)tableView
canEditRowAtIndexPath:(NSIndexPath *)indexPath
在进入编辑模式之前,将在每个单元格上调用的UITableViewDataSource documentation中的。
也是如此- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
将调用所有可编辑的单元格。如果你想改变单元格的样子,你可以在其中任何一个中进行。 (未实现canEditRow..
假设所有行都是可编辑的。)
另请注意,可能还有其他方法可以进入编辑模式,例如在单元格上滑动,在这种情况下
- (void)tableView:(UITableView *)tableView
willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
将为您刷过的单元格调用:
当输入“轻扫删除”编辑模式时,表视图会向委托发送tableView:willBeginEditingRowAtIndexPath:消息,以允许它调整其用户界面。
答案 2 :(得分:0)
这适用于Swift 2.3,只是覆盖自定义单元子类中的setEditing方法:
class MyCell: UITableViewCell {
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
//Place your code here...
}
}