2017-07-29 85 views
0

我有一個tableView和我的tableViewCell有一個isLiked變量和一個likeButton。我想將我的likeButton's tintColor設置爲isLiked的狀態。我這樣做的方式是從Firebase中檢索用戶喜歡的帖子列表,然後將其傳遞到tableView中。如果postID符合列表,我想將isLiked變量設置爲true。Swift:設置TableViewCell的變量

但是,儘管在cellForRow中設置了這個邏輯,tableViewCell中的isLiked變量也沒有相應地設置。我怎樣才能相應地設置它?我的代碼如下:

// in TableViewController 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell 

     let post: FIRDataSnapshot = self.posts[indexPath.row] 
     let postValues = post.value as! [String: AnyObject] 
     let postID = postValues["postID"] as! String 

     for likedPosts in usersLikedPostsList { 
      if likedPosts == postID { 
       DispatchQueue.main.async { 
        cell.isLiked = true 
       } 
      } else { 
       cell.isLiked = false 
      } 
     } 

     return cell 
    } 
// in TableViewCell 
class TableViewCell: UITableViewCell { 

    var isLiked: Bool? 

    @IBOutlet weak var likeButton: UIButton! 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     print(isLiked) 
     if let _ = isLiked { 
      likeButton.tintColor = .red 
     } else { 
      likeButton.tintColor = .darkGray 
     } 

    } 
} 

從打印語句,isLiked變量是零加載表時。我試圖用self.tableView.reloadData(),但它也沒有相應地設置它。

請注意,我想操縱TableViewCell中的isLiked狀態,因爲我想添加代碼以在TableViewCell中切換其狀態,以便用戶可以喜歡和不同於帖子,並相應地對Firebase執行更新。

回答

2

只有一次,執行awakeFromNib()方法將細胞在第一時間將小區從情節串連圖板或NIB文件實例化,所以你需要每到這個值isLiked變化來更新你的細胞,試圖用他的代碼

// in TableViewCell 
    class TableViewCell: UITableViewCell { 

    var isLiked: Bool = false{ 
     didSet{ 
      likeButton.tintColor = .darkGray 
      if(isLiked) 
      { 
       likeButton.tintColor = .red 
      } 
     } 
    } 

    @IBOutlet weak var likeButton: UIButton! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    } 
} 

希望這可以幫助你

+0

簡單而優雅,謝謝! – Koh

0

let post: FIRDataSnapshot = self.posts[indexPath.row] let postValues = post.value as! [String: AnyObject] let postID = postValues["postID"] as! String 嘗試在看你上面的代碼做負載,並作爲帖子ID全局變量。 並打印以查看它是否返回任何內容或使用.count來檢查它。

如果有比計算更1.Then嘗試的方法來使用帖子ID:cellForRowAt

其次,實現代碼如下重裝將工作只有numberOfRowsInSection有從上次不同的值。

重新載入表格時,檢查是否調用此方法。