2 votes

Associer UIVIew à UIButton dans IBAction

J'ai un contrôleur de vue (dans un storyboard) avec 6 boutons et 6 sous-vues. Ces sous-vues sont connectées à des IBOutlets et nommées comme "mySubView1", "mySubView2", etc :

@property (weak, nonatomic) IBOutlet UIView *mySubView1;
@property (weak, nonatomic) IBOutlet UIView *mySubView2;

Je veux animer la valeur alpha de la vue secondaire en fonction du bouton sur lequel on a appuyé. Les 6 boutons sont connectés à la même IBAction (ci-dessous) et chaque bouton a un tag (1 à 6).

Comment puis-je obtenir le nom de la propriété subview de manière dynamique ? par exemple, mySubView1 if sender.tag = 1 par exemple, dans le bloc d'animations ci-dessous :

- (IBAction)animateSubviews:(id)sender {

[UIView animateWithDuration:0.4
                      delay: 0.0
                    options: UIViewAnimationOptionCurveEaseOut
                 animations:^{
                      self.mySubView1.alpha = 1;
                 }
                 completion:^(BOOL finished){

                 }];

}

Donc ce dont j'ai besoin est quelque chose comme : self.mySubView[sender tag].alpha = 1 sorte de chose, mais je suis bloqué, donc tout conseil est apprécié.

Merci beaucoup.

1voto

Undeph Points 761

1) Attribution de balises aux sous-vues

Attribuez des étiquettes à vos UIViews Par exemple, la vue qui correspond au bouton avec l'étiquette 1 pourrait avoir l'étiquette 101.

- (IBAction)animateSubviews:(id)sender {

[UIView animateWithDuration:0.4
                      delay: 0.0
                    options: UIViewAnimationOptionCurveEaseOut
                 animations:^{
                      UIView *subview = [self.view viewWithTag:((UIButton*)sender).tag + 100]; 
                      subview.alpha = 1;
                 }
                 completion:^(BOOL finished){

                 }];
}

2) Utilisation de sélecteurs dynamiques (ce qui répond à votre question initiale)

Vous pouvez utiliser la méthode NSSelectorFromString qui renvoie un SEL .

UIView *subview = [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"mySubView%d", ((UIButton*)sender).tag])];

0voto

MasterBeta Points 242
@property (strong, noatomatic) NSArray* arrayForSubViews;

if (!self.arrayForSubViews) {
    self.arrayForSubViews = @[ self.mySubView1, self.mySubView2, ... ];
}

//get the second view
self.arrayForSubViews[1];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X