gpt4 book ai didi

ios - 保存多个选定的 UITableViewCell 值的数组

转载 作者:搜寻专家 更新时间:2023-11-01 05:49:34 24 4
gpt4 key购买 nike

我在使用 TableView (XCode 9、Swift 4)时遇到了一个非常具体的问题。我想要做的是,创建一个名为 foodDetailInfoArray 的数组,其中包含用户手动选择的表格单元格中 foodName 标签的文本值。目前,虽然 .setSelected 方法可根据需要更改单元格的 UI,但它无法帮助我正确记录 foodName.text 值。问题是即使在滚动 TableView 时也会记录文本值,并且数组值也会被替换。下面是代码和打印输出的示例。

var foodDetailInfoArray: [String] = []

@IBOutlet var unselectedCell: UIView!
@IBOutlet var foodName: UILabel!
@IBOutlet var carbonValue: UILabel!

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
if selected == true {
self.unselectedCell.backgroundColor = UIColor.init(red: 4/255, green: 206/255, blue: 132/255, alpha: 1)
self.foodName.textColor = UIColor.white
self.carbonValue.textColor = UIColor.white
foodDetailInfoArray.append(foodName.text!)
} else {
self.unselectedCell.backgroundColor = UIColor.clear
self.foodName.textColor = UIColor.black
self.carbonValue.textColor = UIColor.black
}

print(foodDetailInfoArray)
}

打印语句给了我这样的结果:(这是甚至没有选择单元格而我只是滚动表格 View 的时候。)

["pepper"]
["pasta"]
["pasta", "pepper"]
["pepper"]
["pepper", "pasta"]
["stir-fry"]
["stir-fry", "stir-fry"]
["vegetable"]
["vegetable", "vegetable"]

然而,我理想中想要的是(按照单击包含给定 foodName 的单元格的顺序):

["pasta"]
["pasta", "pepper"]
["pasta", "pepper", "tomato"]
["pasta", "pepper", "tomato", "stir-fry"]

如果取消选择某个单元格,则必须删除名称,即如果取消选择番茄,则数组将是

["pasta", "pepper", "stir-fry"]

...等等

PS:我不是专业的程序员,最近完全自学,所以如果问题有任何不清楚的地方,请告诉我。

最佳答案

我会通过 View Controller 处理单元格的选择和取消选择,因此您还可以更好地使用您的 foodDetailInfoArray。借助这个answer你可以这样做:

import UIKit

class ViewController: UITableViewController {

// example data
let names = [ "pepper", "pasta", "stir-fry", "vegetable"]

var foodDetailInfoArray: [String] = []

override func viewDidLoad() {
super.viewDidLoad()

// allow multiselection
tableView.allowsMultipleSelection = true
}


// MARK: UITableViewDataSource

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
cell.textLabel?.text = names[indexPath.row]
// Don't show highlighted state
cell.selectionStyle = .none

return cell
}

// MARK: UITableViewDelegate

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// also do your UI changing for the cell here for selecting

// Add your food detail to the array
foodDetailInfoArray.append(names[indexPath.row])
}

override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
// also do your UI changing for the cell here for deselecting

// Remove your food detail from the array if it exists
if let index = foodDetailInfoArray.index(of: names[indexPath.row]) {
foodDetailInfoArray.remove(at: index)
}
}

}

结果

enter image description here

关于ios - 保存多个选定的 UITableViewCell 值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48845607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com