如何以编程方式发送 ONLongPressGesture?
Posted
技术标签:
【中文标题】如何以编程方式发送 ONLongPressGesture?【英文标题】:How can I send a UILongPressGesture programmatically? 【发布时间】:2013-01-18 22:08:33 【问题描述】:如何向对象发送UILongPressGesture
消息?
我知道如何发送触摸,但不知道手势。例如,如果我想发送一个触摸,我可以使用:
[button sendActionsForControlEvents: UIControlEventTouchUpInside];
按钮会收到“内部修饰”。我需要用长按手势做同样的事情。
考虑自动化 UI 测试。调用与手势关联的选择器不会对任何东西进行有意义的测试。
【问题讨论】:
“向对象发送消息”是什么意思? @iProgrammed 请参阅我重新措辞的问题以进行澄清。 【参考方案1】:导入<UIKit/UIGestureRecognizerSubclass.h>
并根据需要模拟的状态序列手动设置state
属性。这将导致调用添加的目标/动作对。每次手动设置状态后,您必须让运行循环运行才能分发消息。
对于UILongPressGestureRecognizer
,为了在实际的“触摸、按住、拖动、释放”手势序列中找到正确的状态序列,我在UIViewController
子类中编写了以下代码@987654325 @.:
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
,但我发现在我的测试中这样做与不这样做之间没有区别),但如果您的用例是自动化测试来验证目标并且操作已正确设置,这可能满足您的需求。
【讨论】:
我仍然有一些时间问题等需要解决,但这让我走上了正确的轨道(并且肯定回答了这个问题)。谢谢!【参考方案2】:你知道对象绑定到它的UILongPressGestureRecognizer
的选择器是什么吗?如果你知道,你可以打电话给它。如果你问有没有像touchesMoved:(UITouch *)touch
这样的方法,那么答案是否定的。
【讨论】:
类似于[button sendActionsForControlEvents: UIControlEventTouchUpInside]
,但使用手势而不是触摸事件。您是在第二句话中说不,这是不可能的吗?以上是关于如何以编程方式发送 ONLongPressGesture?的主要内容,如果未能解决你的问题,请参考以下文章
如何以与在 Windows 资源管理器中“发送给邮件收件人”相同的方式以编程方式发送电子邮件?
如何以编程方式通过 ios 7+ 中的 mms 发送图像? [关闭]