使用commitEditingStyle删除行和节

时间:2016-08-17 19:24:03

标签: swift tableview edit delete-row

我有一个tableView,我在其中显示我在另一个类中创建的0个对象。对象存储在数组中。

var whiskyArray = [WhiskyBuilder]()

在whiskyArray中,我创建了一个字典,将数据移动到tableView中。字典是以第一个字母为键,对象名称为值:

var alphabetizedWhiskies = [String: [WhiskyBuilder]]()

现在我想从tableView中删除带有commitEditingStyle:的单元格,我使用以下方法:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 

    if editingStyle == UITableViewCellEditingStyle.Delete { 

        alphabetizedWhiskies[Array(alphabetizedWhiskies.keys.sort())[indexPath.section]]!.removeAtIndex(indexPath.row)

        if alphabetizedWhiskies[Array(alphabetizedWhiskies.keys.sort())[indexPath.section]]!.count == 0 {

    alphabetizedWhiskies.removeValueForKey(Array(alphabetizedWhiskies.keys.sort())[indexPath.section])

    tableView.deleteSections(NSIndexSet(index:indexPath.section), withRowAnimation: .Fade)

        }else {

            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

            alphabetizedWhiskies.removeValueForKey(Array(alphabetizedWhiskies.keys.sort())[indexPath.row])

        }
}

这种方法实际上很完美,细胞被删除了。但每次我返回此视图时,已删除的单元格将再次返回到表格中。 我是swift的新手,但我认为这是因为在字典中删除了单元格,但是whiskyArray中的对象不是。我试图删除whiskyArray中的对象:

whiskyArray.removeAtIndex(indexPath.row)

但有了这个,whiskyArray中的任何对象都会被删除,但不会删除我要删除的对象。那么如何通过删除tableView中的单元格来在whiskyArray中访问要删除的正确对象。我发现了很多关于删除tableViewCells的内容,但我没有找到,如何删除Array中的含义对象。有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

您需要确保它实际上已从数据中删除。当你从数组中删除它时,它只是一个本地副本,当你离开视图并返回时,我的猜测是你正在重新将数据重新加载到数组中。它与您的UITableView代码无关。

答案 1 :(得分:0)

好的......根据我所知,你有多个问题。

首先,无论你在

中使用什么价值
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      return ???????????
}
删除删除的内容时,

不会被更改。行消失的原因是您手动删除了行,然后在重新加载视图时调用了tableView.reloadData()。

我不会使用这些行。

tableView.deleteSections(NSIndexSet(index:indexPath.section), withRowAnimation: .Fade) tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

这个函数正在运行的事实意味着tableView已经计划删除相应的indexPath ...除非你真的想删除的不只是那个indexPath。

下一步...每次取消视图控制器时(返回上一个视图或使用Show Detail Segue和其他条件时会发生这种情况),您将失去viewController的状态,viewDidLoad将在第一个方向开始除非您将信息存储在Core Data等永久存储中。

接下来就是你正在使用排序功能。因为您正在使用它们,所以您必须确保whiskyArray中的信息以相同的方式排序,或者删除的对象看起来是随机的。