在Objective-C中,我从tableView中删除一行时使用了以下代码,它运行正常。
Objective-C示例
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.arrayName removeObjectAtIndex:indexPath.row];
[self.tableName reloadData];
}
我最近搜索了一下在Swift中是如何完成的,我注意到我发现的大多数代码都与我之前使用的代码不同。
Swift示例
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == UITableViewCellEditingStyle.Delete {
numbers.removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
}
}
所以现在问题是,我做错了还是两种方式都没问题?
两种语言(Swift或Objective-C)的正确方法是什么?
答案 0 :(得分:4)
Objective-C代码有效但不是正确的方法。它应该就像您发布的示例Swift代码一样。
无论语言如何,检查编辑样式都是可选的。这取决于您的表视图支持的内容。如果您只删除并且不支持插入,则验证编辑样式参数几乎没有什么好处。当然,检查起来更安全,以防您稍后再添加插入内容。
在删除单行时在表上使用reloadData
只是效率低下,可能是一个糟糕的用户体验。
tl; dr - Objective-C代码有效,但远非理想。 Swift代码总体上要好得多。
答案 1 :(得分:3)
使用deleteRowAtIndexPaths是正确的方法。如果只是重新加载tableview,删除的行将突然消失,而不是被动画化。