从UITableView - Swift中删除行的正确方法是什么?

时间:2016-01-25 15:55:52

标签: ios objective-c swift uitableview

在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)的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

Objective-C代码有效但不是正确的方法。它应该就像您发布的示例Swift代码一样。

无论语言如何,检查编辑样式都是可选的。这取决于您的表视图支持的内容。如果您只删除并且不支持插入,则验证编辑样式参数几乎没有什么好处。当然,检查起来更安全,以防您稍后再添加插入内容。

在删除单行时在表上使用reloadData只是效率低下,可能是一个糟糕的用户体验。

tl; dr - Objective-C代码有效,但远非理想。 Swift代码总体上要好得多。

答案 1 :(得分:3)

使用deleteRowAtIndexPaths是正确的方法。如果只是重新加载tableview,删除的行将突然消失,而不是被动画化。