tags:

views:

3610

answers:

3

I want to pass a variable to a UIButton action, for example

NSString *string=@"one";
[downbutton addTarget:self action:@selector(action1:string)
     forControlEvents:UIControlEventTouchUpInside];

and my action function is like

-(void) action1:(NSString *)string{
}

However, it returns a syntax error. Can someone show me how to pass a variable to a UIButton action?

+2  A: 

Change it to read:

[downbutton addTarget:self action:@selector(action1:) forControlEvents:UIControlEventTouchUpInside];

I don't know about the Iphone SDK, but the target of a button action probably receives an id (usually named sender).

- (void) buttonPress:(id)sender;

Within the method call, sender should be the button in your case, allowing you to read properties such as it's name, tag, etc.

diciu
A: 

The only way I've found to do this is set an instance variable before calling the action

ennuikiller
+1  A: 

If you need to distinguish between multiple buttons, then you could mark your buttons with tags like this:

[downbutton addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchUpInside];
downButton.tag = 15;

In your action delegate method you can then handle each button according to its previously set tag:

(void) buttonPress:(id)sender {
    NSInteger *tid = ((UIControl *) sender).tag;
    //...
}
Colins