web-dev-qa-db-ja.com

Swiftセグメント化されたコントロールのアクションを処理する

4つのセグメントを持つHMSegmentedControlがあります。選択すると、ポップアップ表示されます。ポップアップが閉じられ、同じセグメントインデックスをクリックしようとすると、ポップアップが再び表示されます。以下を使用することにより、ポップアップが閉じられた後の同じセグメントインデックスのクリックに対するアクションはありません。

segmetedControl.addTarget(self, action: "segmentedControlValueChanged:", forControlEvents: UIControlEvents.ValueChanged) 
25
Poonam

値が変更されたときにターゲットを起動するように設定するため、同じセグメントを選択した場合、値は変更されず、ポップオーバーは表示されません。イベントをTouchUpInsideに変更すると、内部でタッチするたびに起動されますセグメント

segmetedControl.addTarget(self, action: "segmentedControlValueChanged:", forControlEvents:.TouchUpInside) 
10
Icaro

複数のイベントに同じターゲットを追加できます。

だからあなたのsegmentedControlValueChanged:は次のようになります。

func segmentedControlValueChanged(segment: UISegmentedControl) {
    if segment.selectedSegmentIndex == 0 {
    }
    ...
}

次に、複数のイベントのターゲットを追加して、この関数を呼び出すことができます。

segmentedControl.addTarget(self, action: "segmentedControlValueChanged:", forControlEvents:.ValueChanged)
segmentedControl.addTarget(self, action: "segmentedControlValueChanged:", forControlEvents:.TouchUpInside)

これで、値が変更され、ユーザーが指を離したときに関数が呼び出されます。

32
Arbitur

送信者の場合、アクションでアクセスする場合は送信者名senderを使用します。

segmentControl.addTarget(self, action: #selector(changeWebView(sender:)), for: .valueChanged)

または

addTarget(self, action: #selector(changeWebView), for: .valueChanged)
19
Kris Roofe
@IBAction func segmentedControlButtonClickAction(_ sender: UISegmentedControl) {
   if sender.selectedSegmentIndex == 0 {
      print("First Segment Select")
   }
   else { 
      print("Second Segment Select")
   }
}
3

Swift4構文:

segmentedControl.addTarget(self, action: "segmentedControlValueChanged:", for:.touchUpInside)
2
Das

Swift 4.2

// 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 segmentControl.selectedSegmentIndex == 0 {
       print("Select 0")
    }
    else {

    }
}
1
ikbal