2010-11-14 2 views
0

Salut, j'ai plusieurs UIButtons (foo et bar) et lorsqu'il est pressé chaque invoque une méthode d'instance différente (doSomethingFoo et doSomethingBar). Voici le code je travaille:Comment passer une chaîne dans la méthode d'instance objective-c?

CGRect fooImageRect = CGRectMake(38.0f, 192.0f, 130.0f, 25.0f); 
    UIButton *buttonFoo = [[UIButton alloc] init]; 
    buttonFoo.frame = fooImageRect; 
    [buttonFoo setImage:[UIImage imageNamed:@"button_foo_130x25.png"] forState:UIControlStateNormal]; 
    [buttonFoo addTarget:self action:@selector(doSomethingFoo:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:buttonFoo]; 
    [buttonFoo release]; 

CGRect barImageRect = CGRectMake(172.0f, 192.0f, 130.0f, 25.0f); 
    UIButton *buttonBar = [[UIButton alloc] init]; 
    buttonBar.frame = barImageRect; 
    [buttonBar setImage:[UIImage imageNamed:@"button_bar_130x25.png"] forState:UIControlStateNormal]; 
    [buttonBar addTarget:self action:@selector(doSomethingBar:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:buttonBar]; 
    [buttonBar release]; 

Et les méthodes d'instance doSomethingFoo et doSomethingBar

-(void)doSomethingFoo:(id) sender { 
    // code doing something with a NSString having value 'foo' 
} 

    -(void)doSomethingBar:(id) sender { 
     // same code doing something with a NSString having value 'bar' 
} 

Ce que je suis en train de faire est de créer une seule méthode (doSomething) que je peux invoquer lorsque l' bouton est pressé, et passez-lui la chaîne (valeur 'foo' ou 'bar') que je vais référencer dans la méthode. Je me bats avec la syntaxe.

Répondre

0

Vous pouvez utiliser la même méthode pour gérer les deux boutons, mais vous ne pouvez pas choisir les arguments qui seront envoyés. Le sélecteur d'action doit être l'une des formes suivantes:

- (void)action 
- (void)action:(id)sender 
- (void)action:(id)sender forEvent:(UIEvent *)event 

sender est le contrôle qui a envoyé le message. Ainsi, vous serez en mesure de dire lequel des deux boutons a envoyé le message en vérifiant le sender. La possibilité de rendre le contrôle direct consiste à définir la propriété tag du UIButton lorsque vous le créez avec une valeur connue (un #define ou une autre constante) et vérifiez cette propriété dans votre méthode d'action.

0

simplement faire un Ivar de NSString appelé buttonTitle et écrire la méthode comme ceci:

// first set buttonTitle: 
self.buttonTitle = @"foo"; //for buttonfoo 
self.buttonTitle = @"bar", // for buttonbar 




-(void)doSomething:(id) sender { 
NSString *title = self.buttonTitle; 
} 
Questions connexes