Swift 处理分段控件上的操作
Swift handle action on segmented control
我有一个包含 4 个段的 HMSegmentedControl。选择后,它应该弹出视图。当弹出窗口消失,并尝试点击相同的段索引时,它应该再次显示弹出窗口。通过使用以下在弹出窗口关闭后对单击相同段索引没有任何操作。
segmetedControl.addTarget(self, action: "segmentedControlValueChanged:", forControlEvents: UIControlEvents.ValueChanged)
您将目标设置为仅在值更改时触发,因此如果您 select 相同的段,值不会更改并且弹出窗口不会显示,请尝试将事件更改为 TouchUpInside,这样它每次触摸段内时都会被触发
segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged(_:)), for: .touchUpInside)
您可以为多个事件添加相同的目标。
所以假设您的 segmentedControlValueChanged:
看起来像这样:
@objc func segmentedControlValueChanged(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
// value for first index selected here
}
}
那么你可以为超过1个事件添加目标来调用这个函数:
segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged(_:)), for: .valueChanged)
segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged(_:)), for: .touchUpInside)
现在您的函数将在更改值和用户松开手指时被调用。
with sender,在操作中访问时使用发件人名称sender:
segmentControl.addTarget(self, action: #selector(changeWebView(sender:)), for: .valueChanged)
或
addTarget(self, action: #selector(changeWebView), for: .valueChanged)
Swift4 语法:
segmentedControl.addTarget(self, action: "segmentedControlValueChanged:", for:.touchUpInside)
@IBAction func segmentedControlButtonClickAction(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
print("First Segment Select")
}
else {
print("Second Segment Select")
}
}
Swift 5
// 添加 viewController
@IBOutlet var segmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
segmentedControl.addTarget(self, action: #selector(CommentsViewController.indexChanged(_:)), for: .valueChanged)
}
// 使用变化
@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")
}
}
拖放创建一个值类型的动作。
@IBAction func actionSegment(_ sender: Any) {
let segemnt = sender as! UISegmentedControl
print(segemnt.selectedSegmentIndex)// 0 , 1
}
我有一个包含 4 个段的 HMSegmentedControl。选择后,它应该弹出视图。当弹出窗口消失,并尝试点击相同的段索引时,它应该再次显示弹出窗口。通过使用以下在弹出窗口关闭后对单击相同段索引没有任何操作。
segmetedControl.addTarget(self, action: "segmentedControlValueChanged:", forControlEvents: UIControlEvents.ValueChanged)
您将目标设置为仅在值更改时触发,因此如果您 select 相同的段,值不会更改并且弹出窗口不会显示,请尝试将事件更改为 TouchUpInside,这样它每次触摸段内时都会被触发
segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged(_:)), for: .touchUpInside)
您可以为多个事件添加相同的目标。
所以假设您的 segmentedControlValueChanged:
看起来像这样:
@objc func segmentedControlValueChanged(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
// value for first index selected here
}
}
那么你可以为超过1个事件添加目标来调用这个函数:
segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged(_:)), for: .valueChanged)
segmentedControl.addTarget(self, action: #selector(segmentedControlValueChanged(_:)), for: .touchUpInside)
现在您的函数将在更改值和用户松开手指时被调用。
with sender,在操作中访问时使用发件人名称sender:
segmentControl.addTarget(self, action: #selector(changeWebView(sender:)), for: .valueChanged)
或
addTarget(self, action: #selector(changeWebView), for: .valueChanged)
Swift4 语法:
segmentedControl.addTarget(self, action: "segmentedControlValueChanged:", for:.touchUpInside)
@IBAction func segmentedControlButtonClickAction(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
print("First Segment Select")
}
else {
print("Second Segment Select")
}
}
Swift 5
// 添加 viewController
@IBOutlet var segmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
segmentedControl.addTarget(self, action: #selector(CommentsViewController.indexChanged(_:)), for: .valueChanged)
}
// 使用变化
@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")
}
}
拖放创建一个值类型的动作。
@IBAction func actionSegment(_ sender: Any) {
let segemnt = sender as! UISegmentedControl
print(segemnt.selectedSegmentIndex)// 0 , 1
}