取消选择UITableView中的行时如何从数组中删除项目

时间:2017-07-25 01:53:47

标签: swift uitableview

我正在尝试从UITableView捕获所选项目并将其保存到新阵列中。下面的代码通过在点击行时添加项目来创建新数组,不做的是在取消选择行时删除项目。

如果取消选择newFruitList中的某行,如何从UITableView中删除项目?

或者更好的是,在UITableView生成仅包含所选项目的数组的正确方法是什么?

 class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate  {

    let fruits = ["Apples", "Oranges", "Grapes", "Watermelon", "Peaches"]

    var newFruitList:[String] = []

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return fruits.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = UITableViewCell()
        cell.textLabel?.text = fruits[indexPath.row]
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        newFruitList.append(fruits[indexPath.row])
        print("New List: \(newFruitList)")
    }
    @IBAction func makeSelection(_ sender: Any) {
        tableView.allowsMultipleSelectionDuringEditing = true
        tableView.setEditing(true, animated: false)
    }
}

enter image description here

2 个答案:

答案 0 :(得分:5)

您可以通过获取列表中该项目的索引来检查 newFruitList 是否包含您要添加的项目。

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        newFruitList.append(fruits[indexPath.row])
        print("New List: \(newFruitList)")
    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        if let index = newFruitList.index(of: fruits[indexPath.row]) {
            newFruitList.remove(at: index)
        }
        print("New List: \(newFruitList)")
    }

答案 1 :(得分:0)

与选择行时添加元素几乎相同:

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath {
    newFruitList.remove(at: indexPath.row)
    print("New List: \(newFruitList)")
}

您只需使用didDeselectRowAt委托方法。

更新

如评论中所述,此解决方案不起作用,因为newFruitList不一定具有所有原始数组元素。请改为the accepted answer