2015-05-04 69 views
0

解決動態顯示的UIButton中的UITableViewCell

菲利普·米爾斯的解決方案,解決了這個帖子提出的問題,概述如下。


目前,當在應用程序中的啤酒用戶搜索,啤酒在UITableViewCell子類中,其中顯示了啤酒和UILabel實例啤酒廠名的名稱顯示出來。該單元還包含標籤下方的四個按鈕:likeButton,tryButton,dislikeButtondeleteButton

當用戶在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:中的數組?這似乎效率低下。但是,我不確定如何解決這個問題。

回答

1

循環可能會或可能不會成爲性能問題。你可以衡量一下,但是現在假設「不」,因爲它看起來像是一個相當小的數組。

我認爲你的問題是,一旦你得到一個正確的答案,你並沒有停止循環。

如何:

beerCell.deleteButton.hidden = true 
    for savedBeer in savedBeers { 
     if beer.name == savedBeer.beerName && beer.brewery == savedBeer.beerBrewery { 
      beerCell.deleteButton.hidden = false 
      break 
     } 
    } 
+0

我依然實現你的建議後,得到同樣的行爲。 –

+1

啓動循環之前'savedBeers'的內容是什麼? –

+0

啊!這是問題!當視圖出現時,我沒有拿到儲存的啤酒並將它們放入'savedBeers'中。我已更新原始帖子。非常感激! –

相關問題