Ios 如何在swift中以编程方式调用UIView上的手势点击
我有一个UIView,我在其中添加了点击手势:Ios 如何在swift中以编程方式调用UIView上的手势点击,ios,swift,iphone,ios8,uigesturerecognizer,Ios,Swift,Iphone,Ios8,Uigesturerecognizer,我有一个UIView,我在其中添加了点击手势: let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:")) tap.delegate = self myView.addGesture(tap) 我试图在testfile中以编程方式调用它 sendActionForEvent 我正在使用此功能,但它不起作用: myView.sendActionForEvent(UIEvents.touchUpDo
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
tap.delegate = self
myView.addGesture(tap)
我试图在testfile中以编程方式调用它
sendActionForEvent
我正在使用此功能,但它不起作用:
myView.sendActionForEvent(UIEvents.touchUpDown)
它显示发送到实例的未识别选择器
如何解决此问题?您需要使用目标和操作初始化
UITapgestureRecognitizer
,如下所示:
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
myView.addGestureRecognizer(tap)
let tap = UITapGestureRecognizer(target: self, action: "handleTap:")
tap.delegate = self
myView.addGestureRecognizer(tap)
然后,您应该实现处理程序,该处理程序将在每次tap事件发生时调用:
@objc func handleTap(_ sender: UITapGestureRecognizer? = nil) {
// handling code
}
func handleTap(sender: UITapGestureRecognizer) {
// handling code
}
因此,现在调用点击手势识别器事件处理程序与调用方法一样简单:
handleTap()
尝试以下swift代码(在Xcode 6.3.1中测试): 请注意,您的目标可以是UIResponder的任何子类,请参阅(在Xcode 6.3.1中测试):
我在swift上使用Xcode 6.4进行训练。见下文
var view1: UIView!
func assignTapToView1() {
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap"))
// tap.delegate = self
view1.addGestureRecognizer(tap)
self.view .addSubview(view1)
...
}
func handleTap() {
print("tap working")
view1.removeFromSuperview()
// view1.alpha = 0.1
}
func addTapGesture() {
let tap = UITapGestureRecognizer(target: self, action: #selector(MyViewController.handleTap))
tap.numberOfTapsRequired = 1
self.myView.addGestureRecognizer(tap)
}
func handleTap() {
// Your code here...
}
请注意-不要忘记在视图上启用交互:
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
view.addGestureRecognizer(tap)
// view.userInteractionEnabled = true
self.view.addSubview(view)
实现点击手势
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "touchHappen")
view.userInteractionEnabled = true
view.addGestureRecognizer(tap)
var tapGesture = UITapGestureRecognizer()
当识别到抽头时调用此函数
func touchHappen() {
//Causes the view (or one of its embedded text fields) to resign the first responder status.
self.view.endEditing(true)
}
针对Swift 3+的更新
let tap = UITapGestureRecognizer(target: self, action: #selector(self.touchHappen(_:)))
yourView.addGestureRecognizer(tap)
yourView.userInteractionEnabled = true
func touchHappen(_ sender: UITapGestureRecognizer) {
print("Hello Dear you are here")
}
您需要使用目标和操作初始化UITapGestureRecognizer,如下所示:
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
myView.addGestureRecognizer(tap)
let tap = UITapGestureRecognizer(target: self, action: "handleTap:")
tap.delegate = self
myView.addGestureRecognizer(tap)
然后,您应该实现处理程序,该处理程序将在每次tap事件发生时调用:
@objc func handleTap(_ sender: UITapGestureRecognizer? = nil) {
// handling code
}
func handleTap(sender: UITapGestureRecognizer) {
// handling code
}
如果您希望目标C代码如下所示
UITapGestureRecognizer *gesRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; // Declare the Gesture.
gesRecognizer.delegate = self;
[yourView addGestureRecognizer:gesRecognizer]; // Add Gesture to your view.
// Declare the Gesture Recognizer handler method.
- (void)handleTap:(UITapGestureRecognizer *)gestureRecognizer{
NSLog(@"Tapped");
}
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Add tap gesture recognizer to view
let tapGesture = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
myView.addGestureRecognizer(tapGesture)
}
// this method is called when a tap is recognized
func handleTap(sender: UITapGestureRecognizer) {
print("tap")
}
}
或者您想要的swift代码如下所示
UITapGestureRecognizer *gesRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; // Declare the Gesture.
gesRecognizer.delegate = self;
[yourView addGestureRecognizer:gesRecognizer]; // Add Gesture to your view.
// Declare the Gesture Recognizer handler method.
- (void)handleTap:(UITapGestureRecognizer *)gestureRecognizer{
NSLog(@"Tapped");
}
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Add tap gesture recognizer to view
let tapGesture = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
myView.addGestureRecognizer(tapGesture)
}
// this method is called when a tap is recognized
func handleTap(sender: UITapGestureRecognizer) {
print("tap")
}
}
我在Swift 2.2上的Xcode 7.3.1上锻炼。见下文
var view1: UIView!
func assignTapToView1() {
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap"))
// tap.delegate = self
view1.addGestureRecognizer(tap)
self.view .addSubview(view1)
...
}
func handleTap() {
print("tap working")
view1.removeFromSuperview()
// view1.alpha = 0.1
}
func addTapGesture() {
let tap = UITapGestureRecognizer(target: self, action: #selector(MyViewController.handleTap))
tap.numberOfTapsRequired = 1
self.myView.addGestureRecognizer(tap)
}
func handleTap() {
// Your code here...
}
您可以直接调用
handleTap
函数,而不是调用myView的UITapGestureRecognitizer,任何正在寻找Swift 3解决方案的人都可以使用该函数
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
view.addGestureRecognizer(tap)
view.isUserInteractionEnabled = true
self.view.addSubview(view)
// function which is triggered when handleTap is called
func handleTap(_ sender: UITapGestureRecognizer) {
print("Hello World")
}
以下是它在Swift 3中的工作原理:
@IBOutlet var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action:#selector(handleTap))
myView.addGestureRecognizer(tap)
}
func handleTap() {
print("tapped")
}
步骤:1
@IBOutlet var viewTap: UIView!
步骤:2
var tapGesture = UITapGestureRecognizer()
步骤:3
override func viewDidLoad() {
super.viewDidLoad()
// TAP Gesture
tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.myviewTapped(_:)))
tapGesture.numberOfTapsRequired = 1
tapGesture.numberOfTouchesRequired = 1
viewTap.addGestureRecognizer(tapGesture)
viewTap.isUserInteractionEnabled = true
}
步骤:4
func myviewTapped(_ sender: UITapGestureRecognizer) {
if self.viewTap.backgroundColor == UIColor.yellow {
self.viewTap.backgroundColor = UIColor.green
}else{
self.viewTap.backgroundColor = UIColor.yellow
}
}
输出
对于Swift 4:
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
view.addGestureRecognizer(tap)
view.isUserInteractionEnabled = true
self.view.addSubview(view)
// function which is triggered when handleTap is called
@objc func handleTap(_ sender: UITapGestureRecognizer) {
print("Hello World")
}
在Swift 4中,您需要明确指出触发函数可从Objective-C调用,因此您也需要将@objc添加到handleTap函数中
请看这里的@Ali Beadle的答案:我想指出两个一直给我带来问题的地方
- 我在init上创建手势识别器并将其存储在let属性中。显然,将此手势记录添加到视图中不起作用。可能是在初始化过程中传递给手势识别器的自对象未正确配置李>
- 不应将手势识别器添加到具有零帧的视图中。我使用零帧创建所有视图,然后使用autolayout调整它们的大小。自动布局引擎调整视图大小后,必须添加手势识别器。因此,我在ViewDidDisplay中添加了手势识别器,它们可以正常工作李>
let tap = UITapGestureRecognizer(target: self, action: #selector(self.touchTapped(_:)))
self.view.addGestureRecognizer(tap)
@objc func touchTapped(_ sender: UITapGestureRecognizer) {
}
代码9.3,Swift 4.0
class BaseVC: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet weak var iView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let clickUITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.onSelect(_:)))
clickUITapGestureRecognizer.delegate = self
iView?.addGestureRecognizer(tap)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return true
}
@IBAction func onSelect(_ sender: Any) {
}
}
Swift 4
func myviewTapped(_ sender: UITapGestureRecognizer) {
if self.viewTap.backgroundColor == UIColor.yellow {
self.viewTap.backgroundColor = UIColor.green
}else{
self.viewTap.backgroundColor = UIColor.yellow
}
}
首先,创建UITapGestureRecognizer的对象
var tapGesture = UITapGestureRecognizer()
第二步是初始化UITapGestureReconizer。启用用户
交互,然后添加它
override func viewDidLoad() {
super.viewDidLoad()
tapGesture = UITapGestureRecognizer(target: self, action: #selector(YourViewController.myviewTapped(_:)))
infosView.isUserInteractionEnabled = true
infosView.addGestureRecognizer(tapGesture)
view.addSubview(infosView)
}
第三,创建一个方法
@objc func myviewTapped(_ recognizer: UIGestureRecognizer) {
print("button is tapped")
}
请尝试以下扩展 扩展UIView{ func addtappostate(操作:@escaping()->Void){ 让tap=MyTapGestureRecognizer(目标:self,操作:#选择器(self.handleTap(:)) tap.action=动作 tap.numberOfTapsRequired=1 self.addgestureignizer(点击) self.isUserInteractionEnabled=true } @objc func handleTap(\发送方:MyTapGestureRecognitor){ 发件人。操作!() } } 类MyTapGestureRecognizer:UITapGestureRecognizer{ var作用:(()->Void)?=零 } 然后使用它:
submitBtn.addtaptposition{
//你的代码
}
你甚至可以用它来做手机
cell.addtappostate{
//你的代码
}
Swift 4的完整答案
func myviewTapped(_ sender: UITapGestureRecognizer) {
if self.viewTap.backgroundColor == UIColor.yellow {
self.viewTap.backgroundColor = UIColor.green
}else{
self.viewTap.backgroundColor = UIColor.yellow
}
}
步骤1:为视图创建一个出口
@IBOutlet weak var rightViewOutlet: UIView!
步骤2:定义轻触手势
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "touchHappen")
view.userInteractionEnabled = true
view.addGestureRecognizer(tap)
var tapGesture = UITapGestureRecognizer()
步骤3:创建ObjC函数(点击视图时调用)
步骤4:在viewDidLoad()中添加以下内容
内部视图加载
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
self.imgMainAdView.isUserInteractionEnabled = true
self.imgMainAdView.addGestureRecognizer(tapGestureRecognizer)
通话目的
邮件用途
以下是在Swift 5
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
addGestures()
}
// MARK: Add Gestures to target view
func addGestures()
{
// 1. Single Tap or Touch
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapGetstureDetected))
tapGesture.numberOfTapsRequired = 1
view.addGestureRecognizer(tapGesture)
//2. Double Tap
let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapGestureDetected))
doubleTapGesture.numberOfTapsRequired = 2
view.addGestureRecognizer(doubleTapGesture)
//3. Swipe
let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeGetstureDetected))
view.addGestureRecognizer(swipeGesture)
//4. Pinch
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(self.pinchGetstureDetected))
view.addGestureRecognizer(pinchGesture)
//5. Long Press
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(self.longPressGetstureDetected))
view.addGestureRecognizer(longPressGesture)
//6. Pan
let panGesture = UILongPressGestureRecognizer(target: self, action: #selector(self.panGestureDetected))
view.addGestureRecognizer(panGesture)
}
// MARK: Handle Gesture detection
@objc func swipeGetstureDetected() {
print("Swipe Gesture detected!!")
}
@objc func tapGetstureDetected() {
print("Touch/Tap Gesture detected!!")
}
@objc func pinchGetstureDetected() {
print("Pinch Gesture detected!!")
}
@objc func longPressGetstureDetected() {
print("Long Press Gesture detected!!")
}
@objc func doubleTapGestureDetected() {
print("Double Tap Gesture detected!!")
}
@objc func panGestureDetected()
{
print("Pan Gesture detected!!")
}
//MARK: Shake Gesture
override func becomeFirstResponder() -> Bool {
return true
}
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?){
if motion == .motionShake
{
print("Shake Gesture Detected")
}
}
}
Swift 5.1三视图示例 步骤:1->添加情节提要视图和出口视图控制器UIView
@IBOutlet var firstView: UIView!
@IBOutlet var secondView: UIView!
@IBOutlet var thirdView: UIView!
步骤:2->添加情节提要视图标记
步骤:3->添加手势
override func viewDidLoad() {
super.viewDidLoad()
firstView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tap(_:))))
firstView.isUserInteractionEnabled = true
secondView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tap(_:))))
secondView.isUserInteractionEnabled = true
thirdView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tap(_:))))
thirdView.isUserInteractionEnabled = true
}
步骤:4->选择查看
@objc func tap(_ gestureRecognizer: UITapGestureRecognizer) {
let tag = gestureRecognizer.view?.tag
switch tag! {
case 1 :
print("select first view")
case 2 :
print("select second view")
case 3 :
print("select third view")
default:
print("default")
}
}
对于希望激活视图的任何人,请点击手势识别器,而无需直接访问手势识别器。。。当我返回到一个页面时,我必须填充以前通过轻敲填充的气泡。我一直在跟踪那些气泡标签
我不想直接调用选择器函数,而是希望通过编程方式调用UITapGestureRecognitizer来调用它event@muhasturk不要改变投票结果较高的答案的含义。您的编辑使旧Swift版本的答案无效。如果您想发布Swift 2.2的更新,请发布您自己的答案。谢谢。
tap.delegate=self
不需要,因为您已经设置了一个目标,并且操作在Swift3中引发了一个错误,您的句柄tap函数应该是:func handleTap(uu发送方:UITapGestureRecognizer)调用函数应该是…………func handleTap(u发送方:UITapGestureRecognizer?=nil)……您错过了“\uuu”……因此您的调用函数不起作用。……在swift 2.2中,您可以使用新的选择器语法:let tap=uitappesturerecognizer(target:self,action:#selector(self.handleTap(:))@wujo-谢谢;奇怪的是,它实际上对我不起作用,在UIView中可能只在视图控制器中?如果使用图像视图,还记得使用imageView.userInteractionEnabled=true
。被发现的时间太长了。@Josh,是的,这是一个重要的问题。@KhangAzun最好的选择是在viewDidLoad()中直接调用tap函数addaddtappiration()
,注意事项很重要<代码>iUser