我正在尝试根据我的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
。我该怎么做呢?
答案 0 :(得分:5)
在@Schomes的回答和this post的帮助下,我能够弄明白了!
1)将UISegmentedControl
添加到自己的UITableViewCell
中。我建议在覆盖整个UIView
的{{1}}后面添加一个带有白色背景的UISegmentedControl
,以便TableView单元格在UITableViewCell
后面流动。
2)添加自定义单元格类并将其连接到UISegmentedControl
3)在自定义UITableViewCell
课程中添加yourSegmentedControl
等插座。请勿将操作添加到自定义UITableViewCell
类中。这是在步骤4中以编程方式完成的。
4)在UITableViewCell
或UIViewController
课程中,添加以下代码。
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