从正在删除的UITableViewCell获取标题

时间:2017-07-03 17:44:54

标签: ios swift uitableview nsuserdefaults

我希望能够使用UITableViewCell获取正在删除的commit editingStyle: UITableViewCellEditingStyle的标题。这是我需要知道的代码。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell : FavoritesTableViewCell! = tableView.dequeueReusableCell(withIdentifier: "Favorites Cell") as! FavoritesTableViewCell
        if(cell == nil)
        {
            cell = Bundle.main.loadNibNamed("Favorites Cell", owner: self, options: nil)?[0] as! FavoritesTableViewCell;
        }

        cell.songTitle.text=favoriteSongs[indexPath.row].title

        return cell as FavoritesTableViewCell
    }

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

        if editingStyle == .delete {

            // remove the item from the data model
            favoriteSongs.remove(at: indexPath.row)

            // delete the table view row
            tableView.deleteRows(at: [indexPath], with: .fade)
            let propertylistSongs = favoriteSongs.map{ $0.propertyListRepresentation }
            UserDefaults.standard.set(propertylistSongs, forKey: "favoriteSongs")


        } else if editingStyle == .insert {

        }
    }

我想这样做的原因是我可以为UserDefaults创建一个密钥。我在想这个:

    var cell : FavoritesTableViewCell! = tableView.dequeueReusableCell(withIdentifier: "Favorites Cell") as! FavoritesTableViewCell
    UserDefaults.standard.set(false, forKey: "liked\(String(describing: cell.songTitle.text))")

但是,我认为这不起作用,因为只要引用UserDefaults bool,Key就不起作用。所以,我需要从正被删除的UITableViewCell中获取songTitle.text。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

简单的解决方案就在这里

我从您的代码中发现的是,首先您要从数组中删除该对象,但是除了删除它之外,您可以从该索引中获取该歌曲的标题

以下是详细说明的细节

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

        if editingStyle == .delete {

            print(favoriteSongs[indexPath.row]) //Here is your title for the deleted song

            // remove the item from the data model
            favoriteSongs.remove(at: indexPath.row)

            // delete the table view row
            tableView.deleteRows(at: [indexPath], with: .fade)

        } else if editingStyle == .insert {

        }
    }