繁体   English   中英

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

[英]How to display multiple selected rows in a custom table view cell in the next screen

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

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

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

对于删除按钮,我使用mk_addTapHandler Button Extension 你可以在这里看到

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

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

如果您已经在 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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM