检测 UITableView HeaderView 中 UISegmentedControl 的变化
Detect Change in UISegmentedControl inside UITableView HeaderView
我正在尝试根据我的 UITableView header 中 UISegmentedControl
的 selectedSegmentIndex
来控制我的 UITableView
。本质上,我希望这个 UISegmentedControl
像 Twitter 的 'Me' 选项卡一样工作。我在 UITableView
header 中有 UISegmentedControl
并且使用此方法将其出队:
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell = tableView.dequeueReusableCell(withIdentifier: "sectionDetailsHeaderView") as! SectionDetailsHeaderTableViewCell
return cell
}
我有一个连接到 SectionDetailsHeaderTableViewCell
的 UISegmentedControl 插座,但我不知道如何检测 UISegmentedControl 中的变化。我想在每次值更改时设置一个变量 var segmentedControlValue = Int()
到 selectedSegmentIndex
并在值更改时调用函数 func chooseDataToDisplay() {}
。我该怎么做?
segmentedControl.addTarget(self, action: "chooseDataToDisplay:", forControlEvents: .ValueChanged)
其中 segmentedControl
是您的 UISegmentedControl。每次值更改时都会调用 func chooseDataToDisplay(segment: UISegmentedControl) {}
。
参考文献:
https://developer.apple.com/reference/uikit/uisegmentedcontrol
在@Schomes 的回答和 this post 的帮助下,我终于弄明白了!
1) 将 UISegmentedControl
添加到它自己的 UITableViewCell
中。我建议在 UISegmentedControl
后面添加一个带有白色背景的 UIView
来覆盖整个 UITableViewCell
,这样 TableView 单元格就会在 UISegmentedControl
.
后面流动
2) 添加您的自定义单元格 class 并将其连接到 UITableViewCell
3) 添加出口,例如 yourSegmentedControl
到您的自定义 UITableViewCell
class。不要在自定义 UITableViewCell
class 中添加操作。这是在步骤 4 中以编程方式完成的。
4) 在UIViewController
或UITableViewController
class中添加下面的代码。
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
应在 ViewController
class 的顶部声明为 var segmentedControlValue = Int()
。 self.getSegmentValue(sender:)
应声明为:
func getSegmentValue(sender: UISegmentedControl) {
self.segmentedControlValue = sender.selectedSegmentIndex
}
5) 您还需要添加:
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 45
}
这是页眉的高度。在我的例子中,大小是 45
6) 您现在可以在 ViewController
中的任何位置访问 self.segmentedControlValue
。当用户点击不同的段时,它将更新。
我正在尝试根据我的 UITableView header 中 UISegmentedControl
的 selectedSegmentIndex
来控制我的 UITableView
。本质上,我希望这个 UISegmentedControl
像 Twitter 的 'Me' 选项卡一样工作。我在 UITableView
header 中有 UISegmentedControl
并且使用此方法将其出队:
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell = tableView.dequeueReusableCell(withIdentifier: "sectionDetailsHeaderView") as! SectionDetailsHeaderTableViewCell
return cell
}
我有一个连接到 SectionDetailsHeaderTableViewCell
的 UISegmentedControl 插座,但我不知道如何检测 UISegmentedControl 中的变化。我想在每次值更改时设置一个变量 var segmentedControlValue = Int()
到 selectedSegmentIndex
并在值更改时调用函数 func chooseDataToDisplay() {}
。我该怎么做?
segmentedControl.addTarget(self, action: "chooseDataToDisplay:", forControlEvents: .ValueChanged)
其中 segmentedControl
是您的 UISegmentedControl。每次值更改时都会调用 func chooseDataToDisplay(segment: UISegmentedControl) {}
。
参考文献:
https://developer.apple.com/reference/uikit/uisegmentedcontrol
在@Schomes 的回答和 this post 的帮助下,我终于弄明白了!
1) 将 UISegmentedControl
添加到它自己的 UITableViewCell
中。我建议在 UISegmentedControl
后面添加一个带有白色背景的 UIView
来覆盖整个 UITableViewCell
,这样 TableView 单元格就会在 UISegmentedControl
.
2) 添加您的自定义单元格 class 并将其连接到 UITableViewCell
3) 添加出口,例如 yourSegmentedControl
到您的自定义 UITableViewCell
class。不要在自定义 UITableViewCell
class 中添加操作。这是在步骤 4 中以编程方式完成的。
4) 在UIViewController
或UITableViewController
class中添加下面的代码。
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
应在 ViewController
class 的顶部声明为 var segmentedControlValue = Int()
。 self.getSegmentValue(sender:)
应声明为:
func getSegmentValue(sender: UISegmentedControl) {
self.segmentedControlValue = sender.selectedSegmentIndex
}
5) 您还需要添加:
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 45
}
这是页眉的高度。在我的例子中,大小是 45
6) 您现在可以在 ViewController
中的任何位置访问 self.segmentedControlValue
。当用户点击不同的段时,它将更新。