我正在構建一個內置了 2 個不同選項卡的應用程式。第一個選項卡是“主頁”,它基本上有一個表格視圖,其中包含從 api 配置的單元格。(該 api 現在為我獲取國家/地區名稱)這些單元格還有一個“星形”按鈕,現在可以列印特定單元格的資料。
第二個選項卡是“已保存”選項卡(SavedViewController),我想在其中使用 tableview顯示“已加星標”的國家/地區。
您可以查看下圖以了解該應用程式。
App模擬圖
星形按鈕在我的CountryTableViewCell 中有一個功能。我正在使用saveButtonDelegate以便讓SavedViewController知道將要保存的專案。CountryTableViewCell中星號按鈕的代碼如下。
@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的資料。
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 上呼叫此函式。因此,每當我單擊按鈕時,上面的列印陳述句都可以正常作業。
問題是,無論何時單擊星形按鈕,它都應該將當前單擊的單元格的資料附加到SavedViewController中的countryDataArray。但是該陣列沒有按應有的方式填充。
假設我按下了第一個單元格的星號按鈕,我的print("countryData in savevc is (countryDataArray)")陳述句列印:["Vatican City"],然后我按下第二個單元格的星號按鈕,它只列印["Ethiopia"]而它應該列印["Vatican City", "Ethiopia"]
為什么會出現這個問題?我最好的猜測是我從單元格類中委托SavedViewController,因此它對每個其他單元格的行為都不同。如果這是問題,我應該怎么做才能解決它?
非常感謝。
uj5u.com熱心網友回復:
您應該將資料存盤在共享(靜態陣列)物件中,這樣您就只有一個來源,并在您的國家/地區結構中添加保存的指標,這樣您就不必依賴于一個視圖控制器中顯示的內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/368629.html
下一篇:切換并在范圍內找不到變數
