我有一个UIView,并且我添加了点击手势:
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
tap.delegate = self
myView.addGesture(tap)
我试图在testfile中以编程方式调用它 .
sendActionForEvent
我正在使用此功能,但它不起作用:
myView.sendActionForEvent(UIEvents.touchUpDown)
它显示发送到实例的无法识别的选择器 .
我怎么解决这个问题?
提前致谢
18 回答
只需注意 - 不要忘记在视图上启用交互:
我在swift上研究了Xcode 6.4 . 见下文 .
斯威夫特4
如果你想要Objective C代码如下,
或者你想要快速代码如下,
您可以直接调用
handleTap
函数,而不是调用myView的UITapGestureRecognizer,对于 Swift 4 :
在Swift 4中,你需要明确指出触发函数可以从Objective-C调用,所以你需要添加@objc你的handleTap函数 .
请参阅@Ali Beadle的回答:Swift 4 add gesture: override vs @objc
您需要使用目标和操作初始化
UITapGestureRecognizer
,如下所示:然后,您应该实现处理程序,每次发生tap事件时都会调用该处理程序:
因此,现在调用您的tap手势识别器事件处理程序就像调用方法一样简单:
对于正在寻找 Swift 3 解决方案的人
STEP : 1
STEP : 2
STEP : 3
STEP : 4
OUTPUT
您需要使用目标和操作初始化UITapGestureRecognizer,如下所示:
然后,您应该实现处理程序,每次发生tap事件时都会调用该处理程序:
这是它在Swift 3中的工作方式:
实现轻击手势
识别出水龙头时调用此功能 .
Update for For Swift 3
Swift 4
首先,创建UITapGestureRecognizer的对象
第二步是初始化UITapGestureReconizer . 启用用户交互,然后添加它 .
第三,创建一个方法
我在Swift 2.2上研究了Xcode 7.3.1 . 见下文 .
xCode 9.3,Swift 4.0
我想说明两点让我一直遇到问题 .
我在init上创建了Gesture Recognizer并将其存储在let属性中 . 显然,将此手势识别添加到视图不起作用 . 可能是在init期间传递给手势识别器的自身对象,未正确配置 .
不应将手势识别器添加到零帧的视图中 . 我使用零帧创建我的所有视图,然后使用autolayout调整它们的大小 . 必须在自动布局引擎调整视图大小之后添加手势识别器 . 所以我在viewDidAppear中添加了手势识别器,它们可以工作 .
尝试以下swift代码(在Xcode 6.3.1中测试):
请注意,您的目标可以是UIResponder的任何子类,请参阅(在Xcode 6.3.1中测试):