2013年9月13日金曜日

UILabel のタッチで Safari を起動

HTML で言うところの A タグを実現する方法。
ラベルや画像にはアクションが付くものと思い 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 件のコメント:

コメントを投稿