acaniChat的ChatViewController有两种不同类型的单元格,包含单元格标识符:@"MessageCellID"
和@"TimestampCellID"
。如何才能使消息单元格可编辑?
这就是我的所作所为。它有点工作,但只有屏幕上的消息单元格是可编辑的。
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return [[chatContent cellForRowAtIndexPath:indexPath] reuseIdentifier] == MessageCellId;
}
这适用于所有细胞,但这是正确的做法吗?
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return [[cellMap objectAtIndex:[indexPath row]] isKindOfClass:[Message class]];
}
答案 0 :(得分:2)
我的“回答”更多的是建议您使用数据源检查与单元格检查来确定单元格是否可编辑。 tableView:canEditRowAtIndexPath:
是UITableViewDataSource协议消息。它是数据源的一部分的原因是b / c通常是数据模型逻辑,它确定特定单元格中的数据是否应该是可编辑的。在这两个示例中,您使用单元格类型作为单元格中数据类型的代理。
更好的检查类似于您必须在tableView:cellForRowAtIndexPath:
中使用的逻辑来确定要使用哪种类型的单元格。
在不知道数据模型细节的情况下,我无法给出确切的代码,但它类似于:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return [self chatDataTypeAtIndexPath:indexPath] == ChatDataTypeMessage;
}
答案 1 :(得分:0)
你应该修复第一个选项,'=='运算符将检查指针比较,并且不会比较由isEqualToString完成的字符串本身:
所以看起来应该是这样的:
return[ [[chatContent cellForRowAtIndexPath:indexPath] reuseIdentifier] isEqualToString:MessageCellId];