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 回答