ラベルや画像にはアクションが付くものと思い 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 件のコメント:
コメントを投稿