2010-12-13 6 views
6

私はいくつかのUIImageViewを持っていて、それぞれにタグがあります。私は画像の配列を持って、私は何をしたいですか:ユーザーがUIImageViewの1つをタップすると、アプリケーションは配列から特定の画像を返す。UIImageViewのタグを取得する方法私はタップしていますか?

私はこのような実装:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
    [self.view addSubview:scroll]; 

    NSInteger i; 
    for (i=0; i<8; i++) 
    { 
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, i*100 + i*15, 300, 100)]; 
     imageView.backgroundColor = [UIColor blueColor]; 
     imageView.userInteractionEnabled = YES; 
     imageView.tag = i; 

     NSLog(@"%d", imageView.tag); 

     [scroll addSubview:imageView]; 

     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(findOutTheTag:)]; 
     [imageView addGestureRecognizer:tap]; 

    } 

    scroll.contentSize = CGSizeMake(320, 115*i); 

} 
- (void)findOutTheTag:(id)sender 
{ 

    // HOW TO FIND THE tag OF THE imageView I'M TAPPING? 

} 

私はimageView.tagを見つけると、画像を表示するimageView.tag

UIImageView *tappedImage = [imageArray objectAtIndex:imageView.tag]; 

にを渡したいです。

私はそれらのすべてをタグ付けしましたが、質問はどうすれば画像のtagを見つけることができますか?私はタップしていますか?^_ ^を読んでいただきありがとうございます。

答えて

12

あなたのアプリの完全な画像を見ずにお勧めする危険がありますので、UIImageViewsの代わりにカスタムUIButtonを使用してみてはいかがですか? UIButtonを使用すると、アクションを設定し、送信者IDを渡すことができます。このIDから、タグに簡単にアクセスして配列からデータを取り出すことができます。

ORあなたが本当に事実を上記のコードとあなたのノウハウを使用したい場合は - (無効)findOutTheTag:(ID)、送信者のメソッドが呼び出されて、すべてのあなたがしなければならないのです。

- (void)findOutTheTag:(id)sender { 
    switch (((UIGestureRecognizer *)sender).view.tag)  
{ 
    case kTag1: 
    //... 
    case kTag2: 
    //... 
    } 
} 
+1

ここで送信者はジェスチャ認識機能ですので、実際には 'switch(((UIGestureRecognizer *)sender).view.tag)'を実行する必要があります。 – Anna

+0

@aBitObvious良いピックアップ! – Rog

+3

+1(void)childTapped:(UITapGestureRecognizer *)tapGesture {int tag = tapGesture.view.tag;} //私のために働いた – HDdeveloper

2

UIImageViewを使用する代わりに、なぜUIButtonを使用しないでください。そうすれば、UITouchDownイベントのリスナーを追加することができます。各ボタンにタグを付けて、どのボタンが押されたかをtouchDownメソッドで確認することができます。

UIButton *button = [[UIImageView alloc] initWithFrame:CGRectMake(10, i*100 + i*15, 300, 100)]; 
    button.backgroundColor = [UIColor blueColor]; 
    button.tag = i; 
    [button addTarget:self action:@selector(touchDown:) controlEvent:UIControlEventTouchDown]; 

touchDown:メソッドの内部では、タグにアクセスするために送信者をUIButtonにキャストするだけで済みます。

- (void)touchDown:(id)sender 
{ 
    UIButton* button = (UIButton*)sender; 
    switch(button.tag) 
    { 
     case TAG1: 
      break; 
     //etc 
    } 
} 
+0

ありがとう、DHamrick、私は代わりにUIButtonを試しましたUIImageViewは、タグを完全に出力し、私自身の考えを飛び越えるのを助けましたが、UIButtonを使用すると、longPressやスワイプのような他のジェスチャーを実現するジェスチャーをたくさん実装することができます。 UIGestureRecognizerは既にそれらを持っていたので、私はそれらを使用することに決めました。とにかく、あなたの助けをありがとう、私はあなたにアプリを送信します。^_ ^ – flutewang

1

touchBeganメソッドを使用し、タッチされなければならない画像を見つけるには:

注:画像ビューについて確認するために必要なすべてのまずこの方法を使用する今userIntrectionEnabled=YES; する必要がありますが。

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{ 
    // get touch event 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchLocation = [touch locationInView:self.view]; 
    if ([touch view].tag == 800) { 

    //if image tag mated then perform this action  
    } 
} 

あなたはtouchBegan内のswitch文を使用することができます。

関連する問題