2010-06-21 8 views
1

J'ai un ensemble d'instances de classe qui ont une variable d'instance BOOL appelée x. Lorsqu'un bouton est cliqué, j'ai besoin que x soit défini sur NO pour toutes les instances, à l'exception de l'instance liée au bouton qui a déclenché la méthode. Un peu comme comment fonctionne un bouton radio.Définir/Réinitialiser les variables d'instance en fonction du bouton de sélection du bouton UIButton

Il est facile de définir toutes les instances de x sur des variables à NO. J'ai besoin d'aide pour déterminer comment définir, par exemple, cInstance.x à YES. myMethod sera utilisé par de nombreux boutons différents pour se rapporter à différentes instances.

Je peux l'écrire avec trois méthodes distinctes que les sélecteurs appellent mais cela crie une mauvaise programmation.

[myButtonA addTarget:self action:@selector(myMethodA:) forControlEvents:UIControlEventTouchUpInside]; 
[myButtonB addTarget:self action:@selector(myMethodB:) forControlEvents:UIControlEventTouchUpInside]; 
[myButtonC addTarget:self action:@selector(myMethodC:) forControlEvents:UIControlEventTouchUpInside]; 


    - (void)myMethodA:(id)sender { 
    NSArray *objects = [NSArray arrayWithObjects:aInstance, bInstance, cInstance, dInstance, eInstance, nil]; 
    int i = [objects count]; 
    while (i--) { 
     MyClass *selectedInstance = [objects objectAtIndex:i]; 
     selectedInstance.x = NO; 
    } 
    aInstance.x = YES; 
    } 

    - (void)myMethodB:(id)sender { 
    NSArray *objects = [NSArray arrayWithObjects:aInstance, bInstance, cInstance, dInstance, eInstance, nil]; 
    int i = [objects count]; 
    while (i--) { 
     MyClass *selectedInstance = [objects objectAtIndex:i]; 
     selectedInstance.x = NO; 
    } 
    bInstance.x = YES; 
    } 

    - (void)myMethodC:(id)sender { 
    NSArray *objects = [NSArray arrayWithObjects:aInstance, bInstance, cInstance, dInstance, eInstance, nil]; 
    int i = [objects count]; 
    while (i--) { 
     MyClass *selectedInstance = [objects objectAtIndex:i]; 
     selectedInstance.x = NO; 
    } 
    cInstance.x = YES; 
    } 

Maintenant, je suppose que je pourrais créer une nouvelle méthode pour réinitialiser toutes les variables de x à NO, ont alors une méthode distincte pour chaque bouton qui définit une variable spécifique OUI mais ce genre de chose ne devrait exiger un total méthode .

Répondre

2

Eh bien, disons que vous avez un tableau avec des pointeurs vers toutes vos instances (? Est MyClass une sous-classe de UIButton Je suppose que ici) qui ont la propriété x:

NSArray* myButtons = [[NSArray alloc] initWithObjects:button1, button2, ..., nil]; 

Maintenant, supposons que vous avez tous vos événements TouchUpInside pour tous les boutons configurés pour appeler cette méthode buttonPressed. Cette boucle passe à travers tous les boutons et définit le tout non, sauf celui qui vient d'être pressé (expéditeur):

-(void) buttonPressed:(id)sender 
{ 
    for (MyClass* button in myButtons) { 
     button.x = (button == sender); 
    } 
} 

Toutes les propriétés x de la touche sont réglées sur NO sauf pour l'expéditeur (celui pressé) .

Questions connexes