如何向对象发送UILongPressGesture
消息?
我知道如何发送触摸,但不知道手势。例如,如果我想发送触摸,我可以使用:
[button sendActionsForControlEvents: UIControlEventTouchUpInside];
按钮会收到“内部修饰”。我需要用长按手势做同样的事情。
考虑自动化UI测试。调用与手势相关联的选择器不会有意义地测试任何东西。
答案 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
的方法,则答案为否。