我正在尝试从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)
}
}
答案 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。