在UITableView HeaderView中检测UISegmentedControl中的更改

Dan*_*evy 3 uitableview uisegmentedcontrol ios swift uitableviewsectionheader

我试图控制我的UITableView基础上selectedSegmentIndexUISegmentedControl我的UITableView水箱内.从本质上讲,我希望这UISegmentedControl可以像推特的"我"标签一样工作.我有UISegmentedControl一个UITableView标题内部,它使用此方法出列:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "sectionDetailsHeaderView") as! SectionDetailsHeaderTableViewCell
    return cell
}
Run Code Online (Sandbox Code Playgroud)

我有一个连接到UISegmentedControl的插座SectionDetailsHeaderTableViewCell,但我无法弄清楚如何检测UISegmentedControl中的更改.我想设置一个变量,var segmentedControlValue = Int()selectedSegmentIndex每一次的修改,然后调用一个函数,func chooseDataToDisplay() {}该值改变时.我该怎么做呢?

Dan*_*evy 5

在@Schomes回答和这篇文章的帮助下,我能够弄明白!

1)添加UISegmentedControl到自己的UITableViewCell.我建议添加一个UIView带有白色背景的背后UISegmentedControl覆盖整个,UITableViewCell这样TableView细胞就会在后面流动UISegmentedControl.

2)添加自定义单元格类并将其连接到 UITableViewCell

3)添加插座,例如添加yourSegmentedControl到自定义UITableViewCell类.请勿在自定义UITableViewCell类中添加操作.这是在步骤4中以编程方式完成的.

4)在UIViewControllerUITableViewController类中,添加以下代码.

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "yourCellIdentifier") as! yourCustomCellClass
    header.yourSegmentedControl.selectedSegmentIndex = self.segmentedControlValue
    header.yourSegmentedControl.addTarget(self, action: #selector(self.getSegmentValue(sender:)), for: .valueChanged)
    return header
}
Run Code Online (Sandbox Code Playgroud)

self.segmentedControlValue应该var segmentedControlValue = Int()在你的ViewController班级顶部声明.self.getSegmentValue(sender:)应声明为:

func getSegmentValue(sender: UISegmentedControl) {
    self.segmentedControlValue = sender.selectedSegmentIndex
}
Run Code Online (Sandbox Code Playgroud)

5)您还需要添加:

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 45
}
Run Code Online (Sandbox Code Playgroud)

这是标题的高度.在我的情况下,大小是45

6)您现在可以访问self.segmentedControlValue您的任何地方ViewController.当用户点击不同的段时,它将更新.