将单元格添加到另一个 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 中委派,因此它对每个其他单元格的行为都不同。如果这是问题,我应该怎么做才能解决它?
非常感谢。
您应该将数据存储在一个共享(静态数组)对象中,这样您只有一个来源,并将保存的指标添加到您的国家/地区结构中,这样您就不会依赖于一个视图控制器中显示的内容。
我正在构建一个内置了 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 中委派,因此它对每个其他单元格的行为都不同。如果这是问题,我应该怎么做才能解决它?
非常感谢。
您应该将数据存储在一个共享(静态数组)对象中,这样您只有一个来源,并将保存的指标添加到您的国家/地区结构中,这样您就不会依赖于一个视图控制器中显示的内容。