IOS: one IBAction for multiple buttons IOS: one IBAction for multiple buttons ios ios

IOS: one IBAction for multiple buttons


If you're using interface builder to create the buttons, simply point them at the same IBAction in the relevant class.

You can then differentiate between the buttons within the IBAction method either by reading the text from the button...

- (IBAction)buttonClicked:(id)sender {    NSLog(@"Button pressed: %@", [sender currentTitle]);    }

...or by setting the tag property in Xcode and reading it back via [sender tag]. (If you use this approach, start the tags at 1, as 0 is the default and hence of little use.)


-(IBAction)myButtonAction:(id)sender {    if ([sender tag] == 0) {        // do something here    }    if ([sender tag] == 1) {        // Do something here    }    }// in Other words-(IBAction)myButtonAction:(id)sender {        switch ([sender tag]) {        case 0:            // Do something here            break;        case 1:           // Do something here             break;       default:           NSLog(@"Default Message here");            break;}


Set all the buttons to use that one action. Actions generally have a sender parameter, which you can use to figure out which button is calling the action. One popular way to tell the difference between buttons is to assign a different value to each button's tag property. So you might have 40 buttons with tags ranging from 1 to 40. (0 probably isn't a great choice for a tag since that's what the default value is, and any button for which you forget to set the tag will have 0 as the tag value.)

This technique is most useful when all the buttons do approximately the same thing, like the buttons on a calculator or keyboard. If each of the buttons does something completely different, then you still end up with the equivalent of 40 methods, but you substitute your own switch statement for Objective-C's messaging system. In that case, it's often better just to spend the time to create as many actions as you need an assign them appropriately.