在UITableView HeaderView中检测UISegmentedControl中的更改

时间:2017-01-07 01:08:33

标签: ios swift uitableview uisegmentedcontrol uitableviewsectionheader

我正在尝试根据我的UITableView标头中UITableView的{​​{1}}控制我的selectedSegmentIndex。从本质上讲,我希望这个UISegmentedControl像Twitter的“我”一样工作。标签。我在UISegmentedControl标头内有UISegmentedControl,并使用此方法将其取列:

UITableView

我有一个连接到override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let cell = tableView.dequeueReusableCell(withIdentifier: "sectionDetailsHeaderView") as! SectionDetailsHeaderTableViewCell return cell } 的UISegmentedControl的插座,但我无法弄清楚如何检测UISegmentedControl中的更改。我想在每次值更改时将变量SectionDetailsHeaderTableViewCell设置为var segmentedControlValue = Int(),并在值更改时调用函数selectedSegmentIndex。我该怎么做呢?

2 个答案:

答案 0 :(得分:5)

在@Schomes的回答和this post的帮助下,我能够弄明白了!

1)将UISegmentedControl添加到自己的UITableViewCell中。我建议在覆盖整个UIView的{​​{1}}后面添加一个带有白色背景的UISegmentedControl,以便TableView单元格在UITableViewCell后面流动。

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

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

4)在UITableViewCellUIViewController课程中,添加以下代码。

UITableViewController

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 } 应在self.segmentedControlValue课程的顶部声明为var segmentedControlValue = Int()ViewController应声明为:

self.getSegmentValue(sender:)

5)您还需要添加:

func getSegmentValue(sender: UISegmentedControl) {
    self.segmentedControlValue = sender.selectedSegmentIndex
}

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

6)您现在可以在override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 45 } 的任何位置访问self.segmentedControlValue。当用户点击不同的细分时,它会更新。

答案 1 :(得分:1)

segmentedControl.addTarget(self, action: "chooseDataToDisplay:", forControlEvents: .ValueChanged)

segmentedControl是你的UISegmentedControl。每次值更改时,都会调用func chooseDataToDisplay(segment: UISegmentedControl) {}

参考文献:

https://developer.apple.com/reference/uikit/uisegmentedcontrol

分段控件的行为部分 https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/UIKitUICatalog/UISegmentedControl.html#//apple_ref/doc/uid/TP40012857-UISegmentedControl