如何在下一个屏幕的自定义表格视图单元格中显示多个选定的行

时间:2019-11-30 19:08:51

标签: ios swift

我已经创建了一个表格视图并添加了一个自定义表格视图单元格。在自定义表格视图单元格内,我添加了4个标签,并在每个标签上传递了一个数组。我还启用了多行选择。我想将选定的行传递到下一个屏幕并在此处显示。

2 个答案:

答案 0 :(得分:3)

选择行时,每次UITableView didSelect 调用,以便可以为selectedRow的存储值创建数组,如果已在数组中而不是删除行。

selectedRow数组,您可以在下一个屏幕中使用它。

对于删除按钮,我使用mk_addTapHandler Button Extention you can see here

在我的项目中,同样的问题,但是按照我的设计,我在要删除的单元格上放了一个按钮,我解决了,所以您可以使用以下代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellDemo", for: indexPath)
    cell.textLabel?.text = "\(indexPath.row)"

    cell.btnDelete.mk_addTapHandler { (btn)
        for (i,objValue) in selectedRow.enumerated() {
            if indexPath.row == objValue {
                self.selectedRow.remove(at: i)
                for (i,objValue) in selectedRow.enumerated() {
                    if indexPath.row < objValue {
                        selectedRow[i] = objValue - 1
                    }else {
                        selectedRow[i] = objValue + 1
                    }
                }
            }
        }
    }
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  selectedRow.append(indexPath.row)
}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
   for (index, element) in selectedRow.enumerated() {
      if indexPath.row == element {
        selectedRow.remove(at: index)
      }
   }
}

@IBAction func doneClick(_ sender: Any) {
  if let VC = self.storyboard?.instantiateViewController(withIdentifier: "nextScreen") as! nextScreen
    VC.tableViewSelectedRow = selectedRow   
    self.navigationController?.pushViewController(VC, animated: true) 
  }
}

答案 1 :(得分:-1)

如果您已经在tableView中启用了多行选择,则它相对简单。在您的按钮操作方法中,获取所选行的indexPaths,然后使用它们从数据源中提取数据并将其注入到下一个viewController中。下面提供了核心功能,但是由于您尚未共享用于数据源或表设计的代码,或者未指明是针对应用程序使用IB还是代码,因此必须使其适合您的环境。

假设:

  • 您有一个只有一个部分的简单tableView,所有行都是下一个VC的可能数据
  • 您正在用代码编写UI,并且想要推送而不是展示下一个VC
  • 您的视图数据位于名为mainData的数组中
  • 您的下一个视图控制器是一个名为NextViewController的类
@objc doneButtonTapped(_ sender: UIButton) {
   let indexPaths = tableView.indexPathsForSelectedRows
   let selectedData = indexPaths.map{mainData[indexPath.row]}
   let nextVC = NextViewController() 
   nextVC.data = selectedData
   navigationController?.pushViewController(nextVC, animated: true)
}