2017-10-05 79 views
1

我在自定義類UITableViewCell類中有一個按鈕。它顯示/隱藏視圖(同一單元格的一部分)。細胞的高度應該改變。
這是按鈕操作(在UITableViewCell定製類):UITableViewCell自定義類 - 在子視圖高度約束更改後重新加載單元格高度

@IBAction func showHideCartView(sender: UIButton) 
    { 
     if sender.tag == 1 
     { 
      // Show cart view 
      self.buttonArrow.tag = 2 
      self.viewAddToCart.isHidden = false 
      self.constraint_Height_viewAddToCart.constant = 50 
      self.buttonArrow.setImage(UIImage(named: "arrowUp.png"), for: .normal) 
     } 
     else 
     { 
      // Hide cart view 
      self.buttonArrow.tag = 1 
      self.viewAddToCart.isHidden = true 
      self.constraint_Height_viewAddToCart.constant = 0 
      self.buttonArrow.setImage(UIImage(named: "arrowDown.png"), for: .normal) 
     } 

     self.setNeedsUpdateConstraints() 
     self.setNeedsLayout() 
     self.layoutIfNeeded() 
    } 

單元格的高度保持不變。只有當我滾動UITableView並重新訪問單元格時,它的高度纔會更新。

+0

我已經實現了你的差不多的東西,但我不得不這樣做是「self.tableView.beginUpdates() self.tableView.endUpdates()」。請給一個嘗試 – Siyavash

+0

@Siyavash:我已經寫在UITableViewCell的自定義類以上 – Nitish

+0

哦這就是爲什麼可能的話,我會寫一個可能的解決方案 – Siyavash

回答

2

以下方法添加到viewControllertableView刷新表時細胞擴展:

約束後
func refreshTableAfterCellExpansion() { 
    self.tableView.beginUpdates() 
    self.tableView.setNeedsDisplay() 
    self.tableView.endUpdates() 
} 

調用方法進行了更新。如果按鈕操作單元格內的約束,則需要通知viewController有關更改,以便您可以調用該方法。要麼使用委託模式(或直接傳遞tableView參照每個膨脹細胞 - 只記得將其存儲爲weak變量),或發佈使用NotificationCenter.default的通知。

1

因爲這些代碼在TableViewCell,你需要爲在TableViewController你的一個操作方法,所以當按鈕被點擊你就知道了。你可以把你的按鈕的引用您的tableviewCell,然後將細胞cellForRowAt裏面,你可以做

cell.yourButtonRef.addTarget(self, action: #selector(expandButtonTapped(_:)), for: .touchDown) 

和創建一個名爲「expandButtonTapped」功能,並添加tableview中beign和最終更新有

@objc func expandButtonTapped(_ button: UIButton) { 
    self.tableView.beginUpdates() 
    self.tableView.endUpdates() 


} 

請讓我還是知道,如果這不是工作

相關問題