web-dev-qa-db-ja.com

UITapGestureRecognizerセレクター。送信者はジェスチャーであり、UIオブジェクトではありません

タグを使用して識別する一連の画像ビューがあります。シングルタップジェスチャを画像に追加しました。

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];
[tableGridImage addGestureRecognizer:singleTap];
tableGridImage.userInteractionEnabled = YES;
[singleTap release];

これにより、selectImageセレクターは正常に呼び出されますが、ジェスチャは送信者として渡されます。タグを取得できるように、送信者としてimageviewが必要です。

Imageviewとタグの取得方法に関するアイデアはありますか?

47
dysan819

タグを取得する方法を見つけました。これは私にとって質問の最も重要な部分でした。ジェスチャは送信者であるため、添付されているビューが一緒に送信されることがわかりました。

[(UIGestureRecognizer *)sender view].tag

UITapGestureRecognizerセレクターを介して引数を送信する方法を誰かが教えてくれたら、私はまだ興味があります。

54
dysan819

UITapGestureRecognizerセレクターを介して送信できる引数は、次のようなUITapGestureRecognizer自体のみです。

以前と同じように、セレクター名の後に「」を忘れないでください:

UITapGestureRecognizer *singleTap = 
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];

次に、selectImageにパラメーターを追加して、次のようにビューを取得できるようにします。

-(void) selectImage:(UITapGestureRecognizer *)gestureRecognizer{

    //Get the View
    UIImageView *tableGridImage = (UIImageView*)gestureRecognizer.view;
}
27
Samidjo

@ dysan819の回答から、タグなしでオブジェクトを取得できます。私の場合、UILabelです。

- (void)labelTap:(id)sender {
    NSLog(@"tap class: %@", [[(UIGestureRecognizer *)sender view] class]);
    if ([[(UIGestureRecognizer *)sender view] isKindOfClass:[UILabel class]]) {
        UILabel *lb = (UILabel*)[(UIGestureRecognizer *)sender view];
        NSLog(@"tap: %@", lb.text);
    }
}

ハンドラーに個別の機能が必要な場合は、BlocksKitプロジェクトと、特に this ファイルを確認してください。プロジェクトは CocoaPods プロジェクトであるため、ツールチェーンに簡単にインストールできます。

最初に参照されるコードファイルの例:

UITapGestureRecognizer *singleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) {
     NSLog(@"Single tap.");
 } delay:0.18];
 [self addGestureRecognizer:singleTap];

これにより、効果的に各画像のジェスチャ認識機能を簡単に設定できます。

2
Norman H