如何在tableview中的自定义节标题视图中按下按钮时获取该节

时间:2015-03-26 09:20:20

标签: ios uitableview swift

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    var sectionHeaderView = NSBundle.mainBundle().loadNibNamed("PlanCellSectionHeader", owner: nil, options: nil).first as PlanCellSectionHeader!
    sectionHeaderView.addBtn.addTarget(self, action: "didPressAdd:", forControlEvents: UIControlEvents.TouchUpInside)
    return sectionHeaderView
}
func didPressAdd(sender:UIButton) {
    var point = sender.convertPoint(CGPointZero, toView: self.tableView!)
    var indexPath = self.tableView.indexPathForRowAtPoint(point)
    //won't work
    println("section = \(indexPath?.section)")
}

事实证明indexPath是nil,当使用添加到每个节头的标签时,我发现其他人说如果我们在运行时删除部分会崩溃,那么任何帮助吗?

1 个答案:

答案 0 :(得分:1)

您可以在按钮类中使用tag属性。这是实现这一目标的最简单方法,但可能不是最好的方法。

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    var sectionHeaderView = NSBundle.mainBundle().loadNibNamed("PlanCellSectionHeader", owner: nil, options: nil).first as PlanCellSectionHeader!
    sectionHeaderView.addBtn.addTarget(self, action: "didPressAdd:", forControlEvents: UIControlEvents.TouchUpInside)
    sectionHeaderView.addBtn.tag = section
    return sectionHeaderView
}
func didPressAdd(sender:UIButton) {
    println("section = \(sender.tag)")
}

我更喜欢为标题视图创建子类。然后,您可以按下按钮处理索引和操作。

class HeaderView: UIView {
  var section: Int
  @IBAction func buttPressed() {
     println("section = \(section))
  }
}