swift 3 - 如何滑动删除表视图单元格?

时间:2016-12-09 18:09:03

标签: ios uitableview swift3

import UIKit

class PartiesTableViewController: UITableViewController
{
    let cellIdentifier = "partyCell"
    var parties: [Party]?
    let persistence = Persistence()
    let dateFormatter = DateFormatter()

    override func viewDidLoad()
    {
        super.viewDidLoad()

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellIdentifier)

        dateFormatter.dateStyle = DateFormatter.Style.short
        dateFormatter.timeStyle = DateFormatter.Style.short

        print("PartiesTableViewController.viewDidLoad() begins")
    }

    override func viewDidAppear(_ animated: Bool)
    {
        parties = persistence.fetchParties()

        tableView.reloadData()
    }

    //UITableViewDataSource
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return parties?.count ?? 0
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        print("PartiesTableViewController.tableView() begins")
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)

        if let parties = parties
        {
            let party = parties[indexPath.row]

            print("partyname = \(party.name) \(party.startDate)")

            let strDate = dateFormatter.string(from: party.startDate)

            cell.textLabel?.text = "\(party.name) - \(strDate)"
        }

        return cell
    }

    //UITableViewDelegate - delete
    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
    {
        if(editingStyle == UITableViewCellEditingStyle.delete)
        {
            parties.remove(at: indexPath.row)
        }
    }
}

我是iOS开发的新手,这是我的第一个待办事项列表项目。我试图从屏幕上滑动删除表格视图单元格数据。但我的方式似乎不正确。有人可以帮我实现删除单元格方法吗?最后一行parties.remove(at: indexPath.row)给出错误:

  

"类型' [派对]的价值?'没有会员'删除'

2 个答案:

答案 0 :(得分:1)

您必须打开parties可选内容。在修改party数组后,您还必须重新加载表。

parties?.remove(at: indexPath.row)
tableView.reloadData()

有关选项的更多信息:https://developer.apple.com/reference/swift/optional

答案 1 :(得分:1)

更改

parties.remove(at: indexPath.row)

parties?.remove(at: indexPath.row)