如果在其他课程中实施,则自定义拍子识别器方法将不起作用

时间:2018-07-13 16:16:49

标签: ios swift uilabel global uitapgesturerecognizer

是否可以创建其他任何类都可以访问的全局方法来添加分接识别器?

(我是个速成的初学者)

上下文/我要实现的目标:

由于我将在各种视图中使用许多轻敲识别器(用于标签和imageViews),因此我想创建一个默认方法,该方法可在每次需要轻敲识别器时帮助我节省几行代码。

->我想要的例子

class Toolbox {
 static func customTapRecognizerForLabel () {}
 static func customTapRecognizerForImage () {}
}

所以我可以在不同的视图控制器中使用它们:

class ViewControllerOne{
 Toolbox.customTapRecognizerForLabel()
}
class ViewControllerTwo{
 Toolbox.customTapRecognizerForLabel()
}

到目前为止,我做了什么?:

无效的内容: 我在Toolbox.swift中创建了Toolbox类,试图在其他视图控制器中调用它,但是它不起作用。 (也尝试定义类的共享实例,而不是使用静态方法,但是也没有用)

有效的方法: 在同一个视图控制器中实现方法。

我的工具箱代码:

import Foundation
import UIKit

class Toolbox: UIViewController {

static func tapRecognizerforLabel (named label: UILabel, action: Selector) {
 let tapGestureForLabel = UITapGestureRecognizer(target: self, action: action)
 label.addGestureRecognizer(tapGestureForLabel)
 label.isUserInteractionEnabled = true
 }
}

我怎么称呼:

class ViewOne: UITableViewCell {

@IBOutlet weak var nameLabel: UILabel!

override func awakeFromNib() {
 super.awakeFromNib()
 Toolbox.tapRecognizerforLabel(named: nameLabel, action: #selector(self.methodAlpha))
}

func methodAlpha() {
 print("It's friday my dudes")
}
}

我触摸标签时遇到错误:

2018-07-13 11:08:22.131602-0500 MyApp[20435:1274296] 
+[MyApp.Toolbox methodAlpha]: unrecognized selector 
sent to class 0x1033c0038

2018-07-13 11:08:22.218289-0500 MyApp[20435:1274296] 
*** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: 
'+[MyApp.Toolbox methodAlpha]: unrecognized selector 
sent to class 0x1033c0038'

如果我在ViewOne类中实现tapRecognizerforLabel()方法,为什么会起作用,但如果在其他类中实现它,为什么不起作用?

欢迎以其他方式实现我想要的建议

谢谢:)

1 个答案:

答案 0 :(得分:0)

您需要像这样发送目标

definesPresentationContext = true

目标应包含选择器内部方法的实现,因为您设置了func tapRecognizerforLabel (named label: UILabel, action: Selector,target:Any) { let tapGestureForLabel = UITapGestureRecognizer(target:target, action: action) label.addGestureRecognizer(tapGestureForLabel) label.isUserInteractionEnabled = true } self且其中不包含它,因此崩溃发生了,调用

Toolbox