UITableview:单击自定义按钮

时间:2016-09-24 07:07:38

标签: ios swift uitableview uibutton

我有一个UITableview,其中每个单元格都有一个按钮。 我的问题是,如果我单击第一行中的按钮,单元格的高度增加,然后我单击tableviewcell中的另一个按钮已经扩展的单元格高度将减少,选定的单元格高度将增加

尝试此链接后UITableView: How to change cell height dynamically when a button is clicked in it? Swift

这是我的代码:

    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)
        }

    }
  }

尝试此代码后,单击同一行中的按钮时,单元格高度会扩大和缩小。我没有按照以下步骤进行操作

步骤: 1.单击第二行,单元格的高度展开 2.现在点击第一行我需要减少第二行的高度并扩展第一行的高度

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:5)

创建一个数组以保存应扩展的单元格。按下按钮时,相应地向元素添加或删除元素。这是代码:

// 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
    }
}