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

}