3

我正在尝试根据我的 UITableView 标头内部的 来控制UITableView我的selectedSegmentIndexUISegmentedControl本质上,我希望它UISegmentedControl像 Twitter 的“我”标签一样工作。我有UISegmentedControl一个UITableView标题,它使用这种方法出列:

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

我有一个连接到 UISegmentedControl 的插座SectionDetailsHeaderTableViewCell,但我不知道如何检测 UISegmentedControl 的变化。我想设置一个变量,var segmentedControlValue = Int()每次selectedSegmentIndex值更改并在值更改func chooseDataToDisplay() {}时调用函数。我该怎么做呢?

4

2 回答 2

5

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

1)添加UISegmentedControl到它自己的UITableViewCell. 我建议UIView在. UISegmentedControl_UITableViewCellUISegmentedControl

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

3)添加一个出口,例如yourSegmentedControl您的自定义UITableViewCell类。不要在自定义UITableViewCell类中添加操作。这是在步骤 4 中以编程方式完成的。

4) 在UIViewControllerorUITableViewController类中,添加以下代码。

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()的顶部。应声明为:ViewControllerself.getSegmentValue(sender:)

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

5)您还需要添加:

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 45
}

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

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

于 2017-01-07T04:16:57.783 回答
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

于 2017-01-07T02:21:32.377 回答