如何从表格视图中的选定单元格中获取文本?

时间:2017-09-07 13:23:02

标签: ios uitableview swift3

我无法通过在堆栈溢出中搜索的复选标记将多个选定的行文本放入数组中但无法实现它可以任何人帮助我如何获取数组中的文本吗?

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
            }
        }
    }

这是

的图像

enter image description here

3 个答案:

答案 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)
    }
    }