Dan*_*evy 3 uitableview uisegmentedcontrol ios swift uitableviewsectionheader
我试图控制我的UITableView基础上selectedSegmentIndex的UISegmentedControl我的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() {}该值改变时.我该怎么做呢?
在@Schomes回答和这篇文章的帮助下,我能够弄明白!
1)添加UISegmentedControl到自己的UITableViewCell.我建议添加一个UIView带有白色背景的背后UISegmentedControl覆盖整个,UITableViewCell这样TableView细胞就会在后面流动UISegmentedControl.
2)添加自定义单元格类并将其连接到 UITableViewCell
3)添加插座,例如添加yourSegmentedControl到自定义UITableViewCell类.请勿在自定义UITableViewCell类中添加操作.这是在步骤4中以编程方式完成的.
4)在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
}
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.当用户点击不同的段时,它将更新.