1

にUIImageViewを開く:Click an UIImage and open an UIImageView in Objective-c私はこのサイト上でこのソリューションを持って任意のUIImageをクリックして、Objective-Cの

は、あなたのUIImageViewUITapGestureRecognizerを追加します。

UITapGestureRecognizer *tapRecognizer; 
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(yourSelector)]; 
[thumbnail addGestureRecognizer:tapRecognizer]; 
[tapRecognizer release]; 

thumbnail.userInteractionEnabled = YES; // very important for UIImageView 

これは、単一のImageViewのための非常に細かい作業をされていますが、 scrollViewに2つ以上(約20個)を追加しています。どのImageViewをタップしたり、ユーザが選択するかをどのように区別することができますか?私は自分の@selector(imageClicked)を設定しようとしましたが、最後のimageViewのタグしか返しません。

私はループ内でaddGestureRecognizerを追加しています.20個の静止画像をimageViewに動的に読み込むためです。

+1

この問題の解決策を見つけるのに役立つ20のイメージビューを追加する方法をコードで示してください。 –

+0

問題がループにあると確信しています。 – gurooj

+0

@gurooj、はい問題はループにあった、Piyushは解決しました! – User

答えて

5

を追加これは、あなたが複数のビューにシングルタップ認識を追加することはできません

for(int i=0;i<20;i++) 
{ 
    UIImageView *img=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"yourimage.png"]]; 
    [img setTag:i]; 
    img.frame= //set frame accordingly; 
    img.userInteractionEnabled = YES; 
    UITapGestureRecognizer *tap = 
    [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
    [img addGestureRecognizer:tap]; 
    [tap release]; 
    [scrollView addSubView:img]; 
} 

- (void)handleTap:(UITapGestureRecognizer *)recognizer { 
    UIImageView *imageView = (UIImageView *)recognizer.view; 

     switch([imageView tag]) 
    { 
     case 1: 
      //do your work 
      break; 
     . 
     . 
     . 
     . 
     case n: 

    } 
} 
+0

私はこの方法を知っていますが、どの画像がユーザーによってクリックされたのかをどのように識別するのですか?今はタグでは言わないでください。私たちがその行動に飛び込んだ後は役に立つかもしれません! – User

+0

imageViewごとに個別のインスタンスを作成していますか? –

+0

UIImageViewインスタンスを作成し、追加イメージに追加し、ジェスチャを追加し、タグを追加し、最後にそのインスタンスをscrollviewに追加するループを実行しています! – User

1
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
for (UIImageView *thumbnail in imageArray) { 
    [thumbnail addGestureRecognizer:tapRecognizer]; 
} 
[tapRecognizer release]; 

UIGestureRecognizerのプロパティ "view"からビューを取得できます。あなたのセレクタに 、例えば: -

- (void)handleTap:(UITapGestureRecognizer *)recognizer { 
    UIImageView *imageView = (UIImageView *)recognizer.view; 

    // Now do something with your view 
} 
+0

まだフォーカスが最後に追加されたimageView! – User

+0

セレクタがyourSelectorの代わりにyourSelector:であることを確認します。受信したオブジェクトはUIGestureRecognizerでなければなりません。それは、ユーザーから選択されたビューを取得する必要があります。更新されたコードを投稿することはできますか? – Hanon

+0

- (void)imageClicked:(UITapGestureRecognizer *)recognizer { UIImageView * imageViewClicked =(UIImageView *)recognizer.view; NSLog(@ "%d"、imageViewClicked。タグ); } /*最後の画像に絞るだけ*/@Hanon – User

0
あなたはすべての画像にタグを追加する必要があります

thumbnail.tag = 100 example.ThenためyouSelectorにあなたのセレクターを変更します(UITapGestureRecognizer *)送信者。セレクタで がスイッチ

- (void) yourSelector:(UITapGestureRecognizer *)sender { 
    UIImageView *imageView = (UIImageView *)sender.view; 
    switch(imageView.tag) { 
     case 100: { 
     //This code will be handled if tag == 100; 
     } 
    } 
} 
+0

私はこれを試してみましたが、動作しません! SIGABRTエラーを表示しています! - (void)imageClicked:(UIImageView *)imageViewSelected { NSLog(@ "%d"、imageViewSelected.tag); } – User

+0

エラーテキストを表示したり、ImageViewの作成方法を記述できますか? – Moonkid

+0

私は、私の間違いを理解した。以下のコードを使用し、セレクタが@selector(yourSelector :) – Moonkid

1

を助けるかもしれません。タップレコグナイザを追加するすべてのビュー用に新しいビューを作成します。あなただけのかというtableView:cellForRowAtIndexPath:方法でテーブルビューを使用しているので:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // usual implementation 
    static NSString *cellIdentifier = @"CellIdentifier"; 

    UITableViewCell *cell = [tableView dequeue ...]; 
    if (!cell) { 
     cell = [[UITableViewCell alloc] init....]; 
     // add new gesture recognizer here. 
    } 

    // setup cell: set the image (just an example) 
    cell.imageView.image = [images objectAtIndex:indexPath.row]; 

    return cell; 
} 

代わりに他の回答で述べたようなタグを使用して、ちょうどImageViewのを得るための基礎となるモデルで動作するようにしてみてください。タップを取り扱う際は、indexPathがアクセスにどのようなモデルオブジェクトを知るために見つける:

- (void)handleTap:(UITapGestureRecognizer *)recognizer { 
    UIImageView *imageView = (UIImageView *)recognizer.view; 

    // assumes the image view is direct subview of the cell 
    // change to match your cell structure 
    UITableViewCell *cell = (UITableViewCell *) [imageView superview]; 

    // get the index path for the cell clicked 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

    // TODO: Use index path to get full image to display 
} 

あなたが表示するフル画像へのアクセスを得るためにあなたのモデルにアクセスできるように、画像の正確な行は、クリックされた知っている。この方法を。

+0

ありがとうございますが、私はそれをtableviewに追加しません!これは他のアプリで役立つかもしれません。 :) – User

+0

ああ、どういうわけか、あなたがスクロールビューを書いたテーブルビューを読んでいます。 –

0

ImageView &をサブクラス化し、ジェスチャ認識機能をサブクラスに追加してみてください。

イメージごとにImageViewオブジェクトを作成し、そのオブジェクトにイメージを追加します。 イメージの名前のようにクリックするオブジェクトを識別できるように、いくつかのユニークなプロパティを設定します。

関連する問題