5

UILongPressGestureオブジェクトにメッセージを送信するにはどうすればよいですか?

タッチを送る方法は知っていますが、ジェスチャは知りません。たとえば、タッチを送信したい場合は、次のように使用できます。

[button sendActionsForControlEvents: UIControlEventTouchUpInside];

ボタンは「内側のタッチアップ」を受け取ります。長押しジェスチャーで同じことをする必要があります。

自動化された UI テストを考えてみてください。ジェスチャに関連付けられたセレクターを呼び出しても、意味のあるテストは何も行われません。

4

2 に答える 2

8

シミュレートする必要がある一連の状態に応じて、プロパティをインポート<UIKit/UIGestureRecognizerSubclass.h>して手動で設定します。stateこれにより、追加されたターゲット/アクションのペアが呼び出されます。状態を手動で設定するたびに、メッセージをディスパッチするために実行ループを実行する必要があります。

の場合UILongPressGestureRecognizer、実際の「タッチ、ホールド、ドラッグ、リリース」のジェスチャ シーケンスで見られる状態の正しいシーケンスを取得するために、 .UIViewController内のサブクラスに次のコードを記述しましたviewDidLoad

UILongPressGestureRecognizer *r = [[UILongPressGestureRecognizer alloc] init];
[self.view addGestureRecognizer:r];
[r addTarget:self action:@selector(recognize:)];
r.state = UIGestureRecognizerStateBegan;
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
r.state = UIGestureRecognizerStateChanged;
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
r.state = UIGestureRecognizerStateEnded;
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
[r reset];

これは本番コードでは危険だと思います(後で呼び出したいと思うかもしれresetませんが、私のテストではそうするかどうかに違いはありませんでした)が、ユースケースが自動化されたテストであり、ターゲットとアクションが正しく設定されていることを確認する場合これはあなたのニーズを満たすかもしれません。

于 2013-01-19T19:31:10.107 に答える
0

オブジェクトがどのセレクターに関連付けられているか知っていますUILongPressGestureRecognizerか? それを知っていれば、それを呼び出すことができます。のような方法があるかどうかを尋ねている場合touchesMoved:(UITouch *)touch、答えはノーです。

于 2013-01-19T01:08:34.033 に答える