「ひとかじりのりんご」

へっぽこエンジニアの備忘録。こちらは旧ブログ。新しい方はこちら→「http://sbkro.github.io」

InterfaceBuilderを使って、UIImageViewのイベントを取得してみた。

UIBarButtonItemはIBActionを接続することで、簡単にイベントを取得出来るけど、UIImageViewは、それが出来ません。なので、UIImageViewのタップイベントの取得方法を調べてみました。

手順

1. xibにUIImageViewを設置する。
2. ヘッダーファイル(.h)にIBOutletを宣言する。

@interface SampleViewController : UIViewController
{
	@private
	IBOutlet UIImageView * _imageView;
}
@end

3. IBOutletとxibを接続する。
4. 設置したUIImageViewを選択し、「Attribute Inspector」を開く。
5. 「Tag」に、0以外の値を入れる。
6. 「User Interaction Enabled」にチェックを入れる。
f:id:sbkro:20121127232738j:plain
7. 実装ファイル(.m)に以下のメソッドをオーバライドする。

@implementation SampleViewController
- (void) touchesBegan:(NSSet *) touches withEvent: (UIEvent *) event
{
	UITouch * touch = [[event allTouches] anyObject];
	if (touch.view.tag ==_imageView.tag) {
		NSLog("Tap.");
	}
}
@end

「touchesBegan:withEvent:」をオーバライドすると、UIViewとかUIImageViewをタップするごとに、このメソッドが呼び出されます。UIEventからタップしたオブジェクトを取得できるので、tagプロパティを使って判別します。