J'ai ajouté un UISegmentedControl
dans ma candidature. Aucun des boutons n'est sélectionné à l'état normal. Je souhaite implémenter un événement de clic de bouton lorsque le premier segment est sélectionné et un autre événement lorsqu'un autre bouton est cliqué.
Si je comprends bien votre question, il vous suffit d'implémenter une méthode d'action cible (prise en charge par UIControl
qui est la classe parente de UISegmentedControl
) pour la constante UIControlEventValueChanged
, exactement comme dans l'exemple donné dans UISegmentControl documentation de référence .
c'est à dire.
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];
utilisé pour un message avec la signature suivante:
- (void)action:(id)sender
ou
[segmentedControl addTarget:self
action:@selector(action:forEvent:)
forControlEvents:UIControlEventValueChanged];
for
- (void)action:(id)sender forEvent:(UIEvent *)event
ou
[segmentedControl addTarget:self
action:@selector(action)
forControlEvents:UIControlEventValueChanged];
pour la méthode la plus simple:
- (void)action
qui sont des types standard de sélecteurs d'action cible utilisés dans UIKit.
essaye ça:
- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
NSInteger selectedSegment = sender.selectedSegmentIndex;
if (selectedSegment == 0) {
}
else{
}
}
Essaye celui-là,
UISegmentedControl * travelModeSegment = [[UISegmentedControl alloc] initWithItems:
[NSArray arrayWithObjects:NSLocalizedString(@"Driving", nil), NSLocalizedString(@"Walking", nil), nil]];
[travelModeSegment setFrame:CGRectMake(9.0f, 0.0f, 302.0f, 45.0f)];
[cell addSubview:travelModeSegment];
[travelModeSegment release];
puis écrivez une action,
if (travelModeSegment.selectedSegmentIndex == 0) {
//write here your action when first item selected
} else {
//write here your action when second item selected
}
J'espère que cela vous aidera
Version simple en Swift mis à jour
func loadControl(){
self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
}
func segmentSelected(sender: UISegmentedControl)
{
let index = sender.selectedSegmentIndex
// Do what you want
}
Il convient de noter que le sélecteur doit correspondre exactement à une méthode, mais sans les paramètres réels.
@selector(action)
=> -(void) action { ..code.. }
@selector(action:)
=> -(void) action:(id)sender { ..code.. }
@selector(action:forEvent:)
=> -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }
Cela m'a dérouté le plus longtemps et ce n'est pas tout à fait clair d'après les réponses précédentes.
pour Swift utilisez ceci:
segmentedControl.addTarget( self, action: "segmentSelected:", forControlEvents: UIControlEvents.ValueChanged )
et implémenter une méthode comme celle-ci:
func segmentSelected(sender: UISegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
}
Étendez UISegmentedControl si vous souhaitez appeler une action spécifique lorsque le segment sélectionné est sélectionné:
class CustomSegmentedControl : UISegmentedControl
{
override init()
{
super.init()
}
override init(frame:CGRect)
{
super.init(frame:frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func valueChanged(index:Int)
{
// ACTION GOES HERE
}
}
et appelez votre "valueChanged" dans "segmentSelected" comme ceci:
func segmentSelected(sender: CustomSegmentedControl)
{
println("selected index: \(sender.selectedSegmentIndex)")
sender.valueChanged(sender.selectedSegmentIndex)
}
Aussi simple que cela, vous devez effectuer l'action à l'aide du storyboard sur le contrôleur de vue afin de faire fonctionner cette action.
- (IBAction)searchSegmentedControl:(UISegmentedControl *)sender
{
switch (sender.selectedSegmentIndex) {
case 0:
NSLog(@"First was selected");
break;
case 1:
NSLog(@"Second was selected");
break;
case 2:
NSLog(@"Third was selected");
break;
default:
break;
}
}
Vous pouvez attacher un gestionnaire dans IB à l'événement de valeur modifiée: UIControlEventValueChanged
ou vous pouvez le faire en code:
[segmentedControl addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventValueChanged];