I have a UITableview in which each cell has a button. My issue is if i clicked the button in the first row, the height of the cell is increased, then i click the another button in the tableviewcell already expanded cell height will be reduced and selected cell height will be increased
After trying this link UITableView: How to change cell height dynamically when a button is clicked in it? Swift
here is my code:
    var indexOfExpendedCell:NSInteger = -1
    var shouldCellBeExpanded:Bool = false 
     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
       cell.optionButton?.addTarget(self, action: #selector(ViewController.optionAction), forControlEvents: UIControlEvents.TouchUpInside)
       return cell
     }
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
       if shouldCellBeExpanded && indexPath.row == indexOfExpendedCell {
        return 102
       }
       else { return 57 }
     }
    }
   func optionAction(sender: UIButton){
    if let button = sender as? UIButton {
      shouldCellBeExpanded = !shouldCellBeExpanded
      indexOfExpendedCell = sender.tag
        if shouldCellBeExpanded {
          self.tableView.beginUpdates()
          self.tableView.endUpdates()
          button.setImage(UIImage(named: "Reject Icon filled"), forState: .Normal)
        }
        else {
          self.tableView.beginUpdates()
          self.tableView.endUpdates()
          button.setImage(UIImage(named: "Reject Icon"), forState: .Normal)
        }
    }
  }
after trying this code, the cell height is expanded and reduced when i click the button in the same row. I failed to do following steps
Steps : 1. click the second row the height of cell is expanded 2. now click the first row i need to reduce height of second row and expand the height of first row
Can anyone help me?
Create an array to hold which cells should be expanded. When a button is pressed, add or remove an element to the array accordingly. Here is the code:
// Initialize an empty array of integers
var expandedCells = [Int]()
@IBAction func buttonPressed(_ sender: AnyObject) {
    // If the array contains the button that was pressed, then remove that button from the array
    if expandedCells.contains(sender.tag) {
        expandedCells = expandedCells.filter({ $0 != sender.tag})
    }
    // Otherwise, add the button to the array
    else {
        expandedCells.append(sender.tag)
    }
    // Reload the tableView data anytime a button is pressed
    tableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
    // Set the tag on your button to be equal to indexPath.row
    // This allows @IBAction func buttonPressed(_ sender: AnyObject) above to discern which row was tapped
    cell.myButton.tag = indexPath.row
    return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    // Set the row height based on whether or not the Int associated with that row is contained in the expandedCells array
    if expandedCells.contains(indexPath.row) {
        return 102
    } else {
        return 57
    }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With