web-dev-qa-db-fra.com

Swift gérer l'action sur le contrôle segmenté

J'ai un HMSegmentedControl avec 4 segments. Quand il est sélectionné, il devrait apparaître. Et lorsque la fenêtre contextuelle est rejetée, et en essayant de cliquer sur le même index de segment, elle devrait à nouveau afficher la fenêtre contextuelle. En utilisant ce qui suit n'a aucune action sur le clic du même index de segment après pop-up dissipé.

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

Vous définissez votre cible pour qu'elle se déclenche juste au moment où la valeur change, donc si vous sélectionnez le même segment, la valeur ne changera pas et le popover ne s'affichera pas, essayez de changer l'événement en TouchUpInside, donc il sera déclenché chaque fois que vous toucherez à l'intérieur du segment

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

Vous pouvez ajouter la même cible pour plusieurs événements.

Disons donc votre segmentedControlValueChanged: ressemble à ça:

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

Ensuite, vous pouvez ajouter des cibles pour plus de 1 événements pour appeler cette fonction:

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

Maintenant, votre fonction sera appelée lorsqu'une valeur a été modifiée et lorsque l'utilisateur relâche son doigt.

32
Arbitur

avec l'expéditeur, utilisez le nom de l'expéditeur expéditeur lorsque vous souhaitez accéder à l'action:

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

ou

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
Dnyaneshwar Shinde

Syntaxe Swift4:

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

Swift 4.2

// ajouter viewController

@IBOutlet var segmentedControl: UISegmentedControl!

override func viewDidLoad() {
    super.viewDidLoad()
    segmentedControl.addTarget(self, action: #selector(CommentsViewController.indexChanged(_:)), for: .valueChanged)
}

// en utilisant le changement

@objc func indexChanged(_ sender: UISegmentedControl) {
    if segmentControl.selectedSegmentIndex == 0 {
       print("Select 0")
    }
    else {

    }
}
1
ikbal