J'ai un bouton UISegmentedControl
avec trois segments. Dans ViewController.m
cela fonctionne très bien - appuyer sur les boutons déclenche les bonnes méthodes.
J'ai une autre variable UIButton
distincte qui, lorsqu'elle est activée, doit d'abord VÉRIFIER l'état de la variable UISegmentedControl
(pour voir quel bouton est actuellement enfoncé), puis déclencher une méthode en fonction de la valeur de ce segment.
Voici mon code pour cette variable UIButton
. Le bouton lui-même fonctionne, mais je n'arrive pas à comprendre comment obtenir la valeur actuelle du segment de la variable UISegmentedControl
.
Merci beaucoup pour toute aide ici. Je suis nouveau à OBJ-C
. Je sais comment procéder de la manière suivante dans VisualBasic
; les réponses plus verbeuses seraient donc les plus appréciées, car j’ai besoin de connaître le "pourquoi". Je vous remercie.
- (IBAction)decodeButton:(id)sender {
UISegmentedControl *segment = [UISegmentedControl alloc]; // THIS DOES NOT WORK.
if (segment.selectedSegmentIndex == 0) {
decode(textToDecode);
} else if(segment.selectedSegmentIndex == 1) {
decode1(textToDecode);
} else if(segment.selectedSegmentIndex == 2) {
decode2(textToDecode);
}
}
Ici est un didacticiel utilisant UISegmentedControl sous iOS.
Créez simplement un objet de référence et connectez-le correctement au propriétaire du fichier.
IBOutlet UISegmentedControl *segmentedControl;
Puis définir la propriété
@property (strong, nonatomic) IBOutlet UISegmentedControl * segmentedControl;
Synthétiser dans un fichier .m
@synthesize segmentedControl;
Vous pouvez maintenant accéder à l'index sélectionné à tout moment.
- (IBAction)decodeButton:(id)sender {
if (segmentedControl.selectedSegmentIndex == 0) {
decode(textToDecode);
} else if(segmentedControl.selectedSegmentIndex == 1) {
decode1(textToDecode);
} else if(segmentedControl.selectedSegmentIndex == 2) {
decode2(textToDecode);
}
}
Votre code alloc
à chaque fois UISegmentedControl
dans l'action du bouton. Utilisez donc le code suivant pour la création de sUISegmentedControl
et son action.
SegmentChangeView=[[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"Segment1",@"Segment2",@"Segment3",nil]];
SegmentChangeView.frame=CGRectMake(5, 44, self.view.bounds.size.width-10, 33);
SegmentChangeView.selectedSegmentIndex=0;
SegmentChangeView.segmentedControlStyle=UISegmentedControlStyleBar;
SegmentChangeView.momentary = YES;
[SegmentChangeView setTintColor:[UIColor blackColor]];
NSDictionary *attributes =[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13],UITextAttributeFont,nil];
[SegmentChangeView setTitleTextAttributes:attributes forState:UIControlStateNormal];
[SegmentChangeView addTarget:self action:@selector(SegmentChangeViewValueChanged:) forControlEvents:UIControlEventValueChanged];
SegmentChangeView.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleBottomMargin;
[self.view addSubview:SegmentChangeView];
-(IBAction)SegmentChangeViewValueChanged:(UISegmentedControl *)SControl
{
if (SControl.selectedSegmentIndex==0)
{
decode(textToDecode);
}
else if (SControl.selectedSegmentIndex==1)
{
decode1(textToDecode);
}
else if (SControl.selectedSegmentIndex==2)
{
decode2(textToDecode);
}
}
Vous devez supprimer UISegmentedControl *segment = [UISegmentedControl alloc] ;
de votre code, car il alloue à chaque fois une nouvelle instance de votre UISegmentedControl,
créer un point de vente pour vous UISegmentController
comme
@property (strong, nonatomic) IBOutlet UISegmentedControl * segment;
et plus tard à tout moment dans votre fichier viewcontroller.m
, vous pouvez obtenir le segment actuellement sélectionné en utilisant
segment.selectedSegmentIndex;
J'espère que ça a du sens,
Cordialement
Ce code signifie que vous créez un nouvel objet à chaque clic.
UISegmentedControl *segment = [UISegmentedControl alloc] ;
La chose que vous devez faire prend IBOutlet
(propriété) de votre segmentedControl
alors je travaillerai pour vous. ne créez pas un nouvel objet dans la méthode du bouton. lorsque vous ferez un IBOutlet, il sera lié à segmentControl
et votre code fonctionnera à ce moment-là. Merci
Essayez comme ça
- (IBAction)segmentedControlChanged:(id)sender
{
UISegmentedControl *s = (UISegmentedControl *)sender;
if (s.selectedSegmentIndex == 1)
{
//code
}
else
{
//code
}
}