我有一个带有4个分段的HMSegmentedControl。 当选择时,它应该弹出视图。当关闭弹出视图并尝试单击相同的段索引时,它应再次显示弹出视图。 使用以下内容在弹出视图关闭后单击相同的段索引没有任何操作。
segmetedControl.addTarget(self, action: "segmentedControlValueChanged:", forControlEvents: UIControlEvents.ValueChanged)
我有一个带有4个分段的HMSegmentedControl。 当选择时,它应该弹出视图。当关闭弹出视图并尝试单击相同的段索引时,它应再次显示弹出视图。 使用以下内容在弹出视图关闭后单击相同的段索引没有任何操作。
segmetedControl.addTarget(self, action: "segmentedControlValueChanged:", forControlEvents: UIControlEvents.ValueChanged)
segmentedControlValueChanged:
如下所示:@objc func segmentedControlValueChanged(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
// value for first index selected here
}
}
然后您可以为多个事件添加目标,以调用此函数:
segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged(_:)), for: .valueChanged)
segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged(_:)), for: .touchUpInside)
现在你的函数将在值改变且用户松开手指时被调用。
使用“sender”作为发件人,在动作中访问时,请使用发件人姓名“sender”:
segmentControl.addTarget(self, action: #selector(changeWebView(sender:)), for: .valueChanged)
或者addTarget(self, action: #selector(changeWebView), for: .valueChanged)
Swift 5
// 添加视图控制器
@IBOutlet var segmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
segmentedControl.addTarget(self, action: #selector(CommentsViewController.indexChanged(_:)), for: .valueChanged)
}
//使用change
@objc func indexChanged(_ sender: UISegmentedControl) {
if segmentedControl.selectedSegmentIndex == 0 {
print("Select 0")
} else if segmentedControl.selectedSegmentIndex == 1 {
print("Select 1")
} else if segmentedControl.selectedSegmentIndex == 2 {
print("Select 2")
}
}
您将目标设置为在值更改时触发,因此如果选择同一段,则值不会更改,弹出窗口不会显示,请尝试将事件更改为TouchUpInside,这样每次您触摸该段时都会触发
segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged(_:)), for: .touchUpInside)
.TouchUpInside
和.AllEvents
,但它们都不起作用。请查看此链接:https://dev59.com/73I-5IYBdhLWcg3w487k。我不知道为什么原帖的作者接受了这个答案。 - Gerald.valueChanged
事件适用于UISegmentControl。 - ranjit.x.singh@IBAction func segmentedControlButtonClickAction(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
print("First Segment Select")
}
else {
print("Second Segment Select")
}
}
Swift4 语法:
segmentedControl.addTarget(self, action: "segmentedControlValueChanged:", for:.touchUpInside)