解決:動態顯示的UIButton中的UITableViewCell
菲利普·米爾斯的解決方案,解決了這個帖子提出的問題,概述如下。
目前,當在應用程序中的啤酒用戶搜索,啤酒在UITableViewCell
子類中,其中顯示了啤酒和UILabel
實例啤酒廠名的名稱顯示出來。該單元還包含標籤下方的四個按鈕:likeButton
,tryButton
,dislikeButton
和deleteButton
。
當用戶在API數據庫中搜索啤酒時,用戶可以使用單元格中的一個按鈕將啤酒保存到Core Data中的特定類別。這些保存的啤酒將出現在應用程序其他地方的UITableView
中。我能夠成功保存和刪除單元格中的啤酒,並且它們確實顯示在正確類別的UITableView
實例中。但是,如果返回的啤酒結果是保存在覈心數據中的而不是,我希望deleteButton
不會顯示在從API的JSON填充的單元格中,因爲應用程序已設置爲供用戶保存啤酒,更改啤酒的類別,或從搜索結果UITableView
實例中刪除啤酒。
我在儲存,更改啤酒類別以及刪除在類別UITableView
實例和搜索結果UITableView
中正確運行的啤酒。在結果UITableView
中顯示按鈕時出現我的問題。
從API返回結果時,如果在Core Data中保存了與返回結果相匹配的啤酒,我只想要顯示deleteButton
。我猜我需要在cellForRowAtIndexPath:
中進行這種比較,但我覺得我錯誤地進行了這個比較,因爲我可以讓deleteButton
可見或隱藏在所有單元格中,而不管啤酒是否保存在Core中數據與否。
這是我目前的執行:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if scopeButtonIndex == 0 {
let beerCell = tableView.dequeueReusableCellWithIdentifier("foundBeerResultCell", forIndexPath: indexPath) as! BeerTableViewCell
let beer = foundBeerResults[indexPath.row]
beerCell.beerNameLabel.text = beer.name
beerCell.breweryNameLabel.text = beer.brewery
beerCell.delegate = self
for savedBeer in savedBeers {
if beer.name == savedBeer.beerName && beer.brewery == savedBeer.beerBrewery {
beerCell.deleteButton.hidden = false
} else if beer.name != savedBeer.beerName && beer.brewery != savedBeer.beerBrewery {
beerCell.deleteButton.hidden = true
}
}
return beerCell
}
}
目前savedBeers
在覈心數據保存啤酒的數組。正如你所看到的,我將從API返回的每個啤酒都拿回來並保存在foundBeerResults
中,其中填充UITableView
實例的結果。然後,我通過savedBeers
循環查看foundBeerResults
中每個返回的啤酒是否與保存的啤酒相匹配。如果信息匹配,我希望deleteButton
可見,以便用戶可以直接從搜索結果中刪除保存的啤酒。如果返回的啤酒結果與當前保存的啤酒不匹配,我希望deleteButton
不可見。
我是不正確的假設我不應該迭代通過cellForRowAtIndexPath:
中的數組?這似乎效率低下。但是,我不確定如何解決這個問題。
我依然實現你的建議後,得到同樣的行爲。 –
啓動循環之前'savedBeers'的內容是什麼? –
啊!這是問題!當視圖出現時,我沒有拿到儲存的啤酒並將它們放入'savedBeers'中。我已更新原始帖子。非常感激! –