ラベルや画像にはアクションが付くものと思い Storyboard から Action で繋げようと頑張ったが、出来なかったので方法を調べてみた。
どうやらラベルや画像のコントロールの userInteractionEnabled プロパティを有効(YES)にすることによって、タッチ時のイベントが取れるようになるようだ。
ただ、これだけではイベント受け取り側ではどのコントロールのイベントが判断出来ないので、判断材料するため tag プロパティに値を設定して、コントロールの判断をするようにする。
あとは、決めうちにはなるが、表示する URL を URLスキームを使用して Safari を起動するようにすれば良い。
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // ラベル myLabel.userInteractionEnabled = YES; myLabel.tag = 10; // 画像 myImage.userInteractionEnabled = YES; myImage.tag = 20; } // タップイベント判断 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event allTouches] anyObject]; if (touch.view.tag == myLabel.tag) { [self tapLabel:myLabel]; } else if (touch.view.tag == myImage.tag) { [self tapImage:myImage]; } } // ラベルタップ処理 -(IBAction)tapLabel:(id)sender { NSLog(@"label tap!!"); // タップ元はこれで取得できる(今回は別に使わないが・・・) UILabel *label = (UILabel *)sender; // ここでは Google を起動 NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; [[UIApplication sharedApplication] openURL:url]; } // イメージタップ処理 -(IBAction)tapImage:(id)sender { NSLog(@"Image tap!!"); // タップ元はこれで取得できる(今回は別に使わないが・・・) UIImage *image = (UIImage *)sender; // ここでは メーラを起動 NSURL *url = [NSURL URLWithString:@"mailto:xxxx@xxxxx.xxx"]; [[UIApplication sharedApplication] openURL:url]; }これで少し、ラベル・画像が便利になった。
0 件のコメント:
コメントを投稿