如何将 tableView 的多行传输到另一个 ViewController

How can I transfer multiple rows of a tableView to another ViewController

我正在尝试在我的应用程序中添加一项功能,以便一次将多个成员添加到一个操作中。成员列在 tableView 中,用户可以使用 .allowsMultipleSelection = true 函数一次 select 多行。我得到了以下代码,但这不起作用。我认为我的想法可行,但不是我在代码中使用的方式:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

       guard let destination = segue.destination as? AddMultipleMemberTransactionViewController,
        let selectedRows = multipleMemberTableView.indexPathsForSelectedRows else  {
            return
        }
        destination.members = members[selectedRows]
    }

这里有人知道我该如何解决这个问题,因为有一个错误:

Cannot subscript a value of type '[Member?]' with an index of type '[IndexPath]'

我在应用程序中拥有相同的功能,但仅适用于一名会员。我在 indexPathForSelectedRow 之后的 let selectedRows 行中有一个 .row。 indexPathsForSelectedRows 有类似的功能吗?
或者这是错误的方法吗?

你需要

destination.members = selectedRows.map{ members[[=10=].row] }

如 indexPathsForSelectedRows 所示,它 returns 一个 IndexPath 数组。您需要做的是根据这些路径创建一个成员对象数组。

假设您有一个 "members" 数组,其中包含用户可以 select 来自的所有成员,而您的 table 只有 1 个部分:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

   var selectedMembers: [Member] = []
   guard let destination = segue.destination as? AddMultipleMemberTransactionViewController,
    let selectedIndexes = multipleMemberTableView.indexPathsForSelectedRows else  {
        return
    }
    for selectedIndex in selectedIndexes {
      let selectedMember = members[selectedIndex.row]
      selectedMembers.append(selectedMember)
    }
    destination.members = selectedMembers
}

也可以使用数组map()函数将for循环改为单行操作:

let selectedMembers: [Member] = selectedRows.map{ members[[=11=].row] }

两者应该有效地做同样的事情。