1

この質問は以前に何らかの形で尋ねられたことがありますが、私の状況に当てはまる答えが見つかりませんでした。

一言で言えば、アプリケーション用のギャラリー モジュールを作成しています。複数のセクションで構成され、各セクションに多数のサムネイル画像があります。基本的な原則は、ユーザーがどのセクションにいて、どのサムネイルをタップしたかに基づいて、画像ビューアー モジュールが開始され、モーダルに表示されるということです。とても単純に思えます。必要なのは、画像ビューアーの初期化時に 2 つの int 変数 (セクション用と画像用に 1 つ) を渡すことだけです。

問題は、UITapGestureRecognizer がメソッドを直接呼び出せないことです。セレクターを使用しているため、2 つどころか、引数を渡すことができません。私が探しているのは次のようなものです:

[thumbnail004 setUserInteractionEnabled:YES];
UITapGestureRecognizer *tap004 = [[UITapGestureRecognizer alloc] 
                       initWithTarget:self
                       action:@selector(imageTappedWithSectionNumber:6
                                                      andImageNumber:4)];
[thumbnail004 addGestureRecognizer:tap004];

UITapGestureRecognizer を使用するときに、引数を使用してメソッドを直接呼び出す方法はありますか?

そうでない場合、この問題を解決する明白な方法の 1 つは、次のように、画像タップごとに個別のメソッドを作成することです。

- (void) image1_1Tapped { 
  // View initialization by passing 1 and 1
  }
- (void) image1_2Tapped { 
  // View initialization by passing 1 and 2
  }
And so on...

これは、画像ライブラリが動的ではないため可能ですが、世界で最も醜いコードになるため、何としても避けたいと考えています。

クリーンでエレガントなコードでこれを行う方法があるに違いありません...!

参考までに: 1. IB を使用していません。私はすべてをプログラムで行います。2. 1 つの引数を渡すだけでは十分ではありません。私は本当に2つを渡す必要があります。

4

2 に答える 2

9

とともに使用associated objectするpass argumenttap gesture instance.

object-c-associated-objectsリンクを参照してください。

于 2012-12-31T11:45:21.937 に答える
4

ジェスチャ レコグナイザーは、1 つの引数のみをアクション セレクターに渡します。メインビューのさまざまな画像サブビューのタップを区別しようとしていると思いますか? その場合、最適な方法は、-locationInView: を呼び出し、スーパービューを渡し、そのビューで -hitTest:withEvent: を呼び出し、結果の CGPoint を使用することです。

于 2012-12-31T11:44:04.693 に答える