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



在Objective-C中,我在从tableView中删除一行时使用了以下代码,它工作得很好。

目标-C 示例

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.arrayName removeObjectAtIndex:indexPath.row];
    [self.tableName reloadData];
}

我最近搜索了一下,看看在 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)的正确方法是什么?

Objective-C代码可以工作,但并不是真正的正确方法。它应该就像你发布的示例 Swift 代码一样。

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

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

tl;dr - Objective-C代码可以工作,但远非理想。Swift 代码总体上要好得多。

使用 deleteRowAtIndexPath 是正确的方法。如果只是重新加载表视图,则删除的行将突然消失,而不是以动画形式显示。

相关内容

最新更新