如何以编程方式发送UILongPressGesture?

时间:2013-01-18 22:08:33

标签: ios uigesturerecognizer

如何向对象发送UILongPressGesture消息?

我知道如何发送触摸,但不知道手势。例如,如果我想发送触摸,我可以使用:

[button sendActionsForControlEvents: UIControlEventTouchUpInside];

按钮会收到“内部修饰”。我需要用长按手势做同样的事情。

考虑自动化UI测试。调用与手势相关联的选择器不会有意义地测试任何东西。

2 个答案:

答案 0 :(得分:8)

导入<UIKit/UIGestureRecognizerSubclass.h>并根据您需要模拟的状态序列手动设置state属性。这将导致调用添加的目标/操作对。每次手动设置状态后,必须让运行循环运行,以便分派消息。

对于UILongPressGestureRecognizer,要获得实际状态中正确的状态序列,请触摸,按住,拖动,释放&#39;手势序列,我在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但我发现在我的测试中没有区别),但如果您的用例是自动测试以验证目标和行动已正确设定,可满足您的需求。

答案 1 :(得分:0)

你知道对象绑定到UILongPressGestureRecognizer的选择器吗?如果你知道,你可以打电话给它。如果您在询问是否有类似touchesMoved:(UITouch *)touch的方法,则答案为否。