2017-10-05 97 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() 


} 

请让我还是知道,如果这不是工作

相关问题