只在UITableView中删除一些行[Swift 3.0 - Xcode 8]

时间:2017-07-27 21:27:50

标签: ios swift uitableview core-data delete-row

我有一个具有Entity FOOD的数组fruit = ["Apple", "Orange", "Pear", "Kiwi"],并在UItableView中显示。有没有办法让一些内容无法取消。例如,我可以让"Kiwi"取消删除。

有点像, let i = fruit.index(where: "Kiwi") let IArr = [0...fruit.count] IArr = IArr.filter{$0 != i} //删除Kiwi的索引

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IArr) {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext

    if editingStyle == .delete{
        let FRUIT = fruit[indexPath.row]
        context.delete(FRUIT)

        appDelegate.saveContext()
        do {
            fruit = try context.fetch(FOOD.fetchRequest())
        }
        catch
        {
            print("did not fetch")}
        }
        tableView.reloadData()}

但是,这不起作用,因为indexPath无法获取数组类型。 我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

您可以测试索引路径中的行不是Kiwi:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IArr) {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext {

    let FRUIT = fruit[indexPath.row]

    if editingStyle == .delete && FRUIT != "Kiwi" {
        /* delete */
    }
}

答案 1 :(得分:0)

如果向左滑动时未显示编辑部分。您可以使用它。

 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {

     let FRUIT = fruit[indexPath.row]

     if (FRUIT != "Kiwi") {
        return true
     }

     return false

    }