IBAction内でsenderを識別する方法

1つのアクションメソッドで、複数のsenderから送られたメッセージを処理する際に、
調べたことをメモとしてまとめておく。


このためには、各種GUI部品の親クラスとなっている UIView class の tag プロパティを使用する。

tag
The receiver’s tag, an integer that you can use to identify view objects in your application.

@property(nonatomic) NSInteger tag


iPhone OS Reference Library - UIView Class Reference より引用

サンプルコード:
1つのView上に2つのボタンがあり、1つのアクションメソッドでそれらのボタンがクリックされた時の処理をまとめて行う。

#import <UIKit/UIKit.h>

// ボタン識別用のenum
typedef enum {
	Button_1,
	Button_2
} ButtonType;

@interface MyView : UIViewController {
	IBOutlet UIButton *button1;
	IBOutlet UIButton *button2;
}

// メッセージを送信したsenderを識別するアクションメソッド
- (IBAction) identifySender:(id)sender;

@end

@implementation MyView

- (void) viewDidLoad {
// 各ボタンの tag プロパティに識別情報をセット
	button1.tag = Button_1;
	button2.tag = Button_2;
	
	[super viewDidLoad];
}

- (IBAction) identifySender:(id)sender {

        // senderを識別するため、sender の tag プロパティをチェック
	if((UIButton*)sender.tag == Button_1) {
		NSLog(@"button1 is a sender of this message.");
	}
        else if ((UIButton*)sender.tag == Button_2) {
		NSLog(@"button1 is a sender of this message.");
	}
}

@end