影响所有TableView标题中按钮的操作

时间:2017-02-13 15:42:38

标签: ios swift uitableview ibaction uitableviewsectionheader

我正在为我的TableView使用自定义UITableViewHeaderFooterView。我试图在一个部分(我已经工作)中实现隐藏和显示行。我决定在部分标题中添加一个按钮(>),以便在部分为"展开/折叠"时可以旋转它。

单击按钮时出现的问题。调用rotateCollapseButton()函数时,所有节标题中的(>)按钮都会旋转,而不仅仅是单击的按钮。有时它甚至会排除被点击的按钮,或点击一个按钮会影响另一个按钮而不是自身。 我怎样才能使只有正确的按钮旋转?

这是我为自己创建的自定义标题创建的代码。

var rotated:Bool = false

var section:Int?

weak var delegate:MessageGroupHeaderDelegate?

@IBAction func expandCollapseButtonClicked(_ sender: Any) {
    rotateCollapseButton(sender as! UIButton)
    delegate?.didPressExpandCollapseButton(atSection : self.section!)
}

func rotateCollapseButton(_ button:UIButton) {
    UIView.animate(withDuration: 0.5) { () -> Void in
        var rotationAngle:CGFloat = CGFloat(M_PI_2)

        if self.rotated {
            rotationAngle = CGFloat(0)
        }

        button.transform = CGAffineTransform(rotationAngle : rotationAngle)

        self.rotated = !self.rotated
    }
}

编辑:标题初始化的代码......

 func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    // Dequeue with the reuse identifier
    let cell = self.massMessageGroupsTableView.dequeueReusableHeaderFooterView(withIdentifier: "MessageGroupTableViewHeader")
    let header = cell as! MessageGroupTableViewHeader
    header.groupNameLabel.text = messageGroupsMap[section]?.messageGroup.name
    header.section = section
    header.setComposeButtonImage()
    header.delegate = self

    return cell
}

谢谢!

1 个答案:

答案 0 :(得分:0)

在标题设置中,尝试执行此操作:

 func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    // Dequeue with the reuse identifier
    let cell = self.massMessageGroupsTableView.dequeueReusableCell(withIdentifier: "MessageGroupTableViewHeader")
    let header = cell as! MessageGroupTableViewHeader
    header.groupNameLabel.text = messageGroupsMap[section]?.messageGroup.name
    header.section = section
    header.setComposeButtonImage()
    header.delegate = self

    let containingView : UIView = UIView()
    containingView.addSubview(header)

    return containingView
}