将单元格添加到另一个 TableView。 (从一个表视图中选择一个项目,在另一个表视图中显示它)

Adding a cell to another TableView. (selecting an item from a tableview, showing it in another tableview)

我正在构建一个内置了 2 个不同选项卡的应用程序。第一个选项卡是“Home”,它基本上有一个表格视图,其中包含从 api 配置的单元格。(api 现在让我获取国家/地区名称) 这些单元格还有一个“星号”按钮,可以暂时打印特定单元格的数据。

第二个选项卡是 “已保存” 选项卡(SavedViewController),我想在其中显示 “已加星标” 个国家/地区,使用表格视图。

您可以查看下图以了解该应用程序。

App simulation Image

星形按钮在我的 CountriesTableViewCell 中有一个功能。我正在使用 saveButtonDelegate 以便让 SavedViewController 知道某个项目将被保存。 CountriesTableViewCell 中星形按钮的代码如下。

@objc func buttonTapped() {
    //If Button is selected fill the image. Else unfill it.
    
    if !isSaveButtonSelected {
        saveButton.setImage(UIImage(systemName: "star.fill"), for: .normal)
        isSaveButtonSelected = true
        
        saveButtonDelegate?.saveButtonClicked(with: countryData) //Checking if save button is clicked
    }
}

countryData 是我从 api 获取的数据,这是我要传递给 SavedViewController[=59= 的数据].

struct CountryData: Codable {
let name : String
}

所以在 SavedViewController 上,我使用 SaveButtonProtocol 一致性处理数据,如下所示:

extension SavedViewController: SaveButtonProtocol {

func saveButtonClicked(with data: CountryData) {
    countryDataArray.append(data)
    print("saveButtonClicked")
    print("countryData in savevc is \(countryDataArray)")
    DispatchQueue.main.async {
        self.countriesTableView.reloadData()
    }
}
}

每当我单击第一个选项卡上的星形按钮时,都会在 SavedViewController 上调用此函数。因此,每当我单击按钮时,上面的 print 语句都可以正常工作。

问题是,无论何时单击星号按钮,它都应该将当前单击的单元格的数据附加到 SavedViewController 中的 countryDataArray .但是数组没有按预期填充。

假设我按下了第一个单元格的星号按钮,我的 print("savevc 中的 countryData 是 (countryDataArray)") 语句打印:["Vatican City "],然后我按下第二个单元格的星形按钮,它只打印 ["Ethiopia"] 而它应该打印 ["Vatican City", "埃塞俄比亚"]

为什么会出现这个问题?我最好的猜测是我将 SavedViewController 从单元格 class 中委派,因此它对每个其他单元格的行为都不同。如果这是问题,我应该怎么做才能解决它?

非常感谢。

您应该将数据存储在一个共享(静态数组)对象中,这样您只有一个来源,并将保存的指标添加到您的国家/地区结构中,这样您就不会依赖于一个视图控制器中显示的内容。