如何在tableView内部删除?

时间:2019-07-11 23:13:55

标签: swift

我有一个用于iOS应用的快速代码。

我正在使用tableView,以便向左滑动,以便删除用户保存的位置列表。

带有问号的部分是关键公园,我不知道该放什么,或者哪里出了错...

提前谢谢

import UIKit
import UserNotifications

class PlacesTableViewController: UITableViewController {
  override func viewDidLoad() {
    super.viewDidLoad()


    NotificationCenter.default.addObserver(
      self,
      selector: #selector(newLocationAdded(_:)),
      name: .newLocationSaved,
      object: nil)
  }

  @objc func newLocationAdded(_ notification: Notification) {
    tableView.reloadData()
  }

  override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return LocationsStorage.shared.locations.count
  }




    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {

        if editingStyle == .delete{

            ???.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .fade)

        }

    }

  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "PlaceCell", for: indexPath)
    let location = LocationsStorage.shared.locations[indexPath.row]
    cell.textLabel?.numberOfLines = 2
    cell.textLabel?.text = location.description
    cell.detailTextLabel?.text = location.dateString
    return cell
  }

  override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 110
  }
}

3 个答案:

答案 0 :(得分:0)

假设LocationsStorage.shared.locations是一个数组,可以使用LocationsStorage.shared.locations.remove(at: indexPath.row)。如果您遇到此问题,请指定您遇到的错误,以便我进一步提供帮助

LocationsStorage.shared.locations.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)

另一方面,还要确保在通过执行多次插入/删除操作修改tableView时添加beginUpdatesendUpdates

编辑:-

由于您收到“无法在不可变值上使用变异成员:'位置'setter无法访问”,这显然意味着您拥有对该数组的只读访问权限,因此您有两个选择。

1)转到单例类(LocationsStorage类),然后更改locations集合以使其可变。 (您可能/不想这样做。但是,如果需要通过tableView修改单例的数组,则别无选择)

2)如果您真的不需要修改单例类的数组,则可以在处理tableView的类上拥有自己的本地集合,例如var myLocationArray = LocationsStorage.shared.locations并将该数组用作您的数据源

答案 1 :(得分:0)

由于LocationsStorage.shared.locations是数据源数组,只需替换????

 if editingStyle == .delete{
    LocationsStorage.shared.locations.remove(at: indexPath.row)
    tableView.deleteRows(at: [indexPath], with: .fade)
 }

答案 2 :(得分:-1)

对于我所看到的,您必须从

中删除
LocationsStorage.shared.locations

代码的下一部分看起来不错,然后您只需执行

tableView.reloadData() 
再次

查看表中反映的更改。