我无法通过在堆栈溢出中搜索的复选标记将多个选定的行文本放入数组中但无法实现它可以任何人帮助我如何获取数组中的文本吗?
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return productName.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "filterSelectionCell", for: indexPath) as! FilterSelectionCell
activityIndicator.stopAnimating()
activityIndicator.hidesWhenStopped = true
tableDetails.isHidden = false
cell.brandProductName.text = productName[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
if let cell = tableView.cellForRow(at: indexPath as IndexPath) {
if cell.accessoryType == .checkmark{
cell.accessoryType = .none
}
else{
cell.accessoryType = .checkmark
}
}
}
这是
的图像答案 0 :(得分:1)
使用UITableView的indexPathsForSelectedRows属性
您将能够获取所选行的所有indexPath,然后在这些indexPaths的数组上进行集成,并从数据集中获取文本(在您的情况下为productName数组)。
像这样:
fun getAllTextFromTableView() {
guard let indexPaths = self.tableView.indexPathsForSelectedRows else { // if no selected cells just return
return
}
for indexPath in indexPaths {
print("\(productName[indexPath.row])") //Here you get the text of cell
}
}
你需要在表格视图中使用@IBOutlet才能在函数中访问它。
答案 1 :(得分:0)
您应该使用产品对象数组而不是表的数据源的名称数组。每个产品都有一个名称和一个Bool值来表明它是否被选中。
查找所选产品将变得简单 - 更重要的是 - 您不会使用UI作为数据模型来了解是否选择了某些内容。
答案 2 :(得分:0)
以下是我的回答,您可以从数组中删除先前在数组中添加的数组中的选定字符串
var values = [String]()
var selected: Bool
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
selected = false
if let cell = tableView.cellForRow(at: indexPath as IndexPath) {
if cell.accessoryType == .checkmark{
cell.accessoryType = .none
print("\(productName[indexPath.row])")
values = values.filter{$0 != "\(productName[indexPath.row])"}
selected = true
print(values)
}
else{
cell.accessoryType = .checkmark
}
}
if selected == true{
print(values)
}
else{
getAllTextFromTableView()
}
}
func getAllTextFromTableView() {
guard let indexPaths = self.tableDetails.indexPathsForSelectedRows else { // if no selected cells just return
return
}
for indexPath in indexPaths {
values.append(productName[indexPath.row])
print(values)
}
}