如果在其他类中实现,自定义点击识别器方法将不起作用
Posted
技术标签:
【中文标题】如果在其他类中实现,自定义点击识别器方法将不起作用【英文标题】:Custom tap recognizer method won’t work if implemented in other class 【发布时间】:2018-07-13 16:16:48 【问题描述】:是否可以创建任何其他类都可以访问的全局方法来添加点击识别器?
(我是 swift 的初学者)
背景/我想要实现的目标:
由于我将在各种视图中使用大量点击识别器(用于标签和图像视图),因此我想创建一个默认方法,以帮助我在每次需要点击识别器时节省几行代码。
-> 我想要的例子
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】:你需要这样发送目标
func tapRecognizerforLabel (named label: UILabel, action: Selector,target:Any)
let tapGestureForLabel = UITapGestureRecognizer(target:target, action: action)
label.addGestureRecognizer(tapGestureForLabel)
label.isUserInteractionEnabled = true
目标应该包含选择器内方法的实现,因为您设置了self
,即Toolbox
,它不包含它,因此发生崩溃,调用
Toolbox.tapRecognizerforLabel(named: nameLabel, action: #selector(self.methodAlpha),target:self)
【讨论】:
以上是关于如果在其他类中实现,自定义点击识别器方法将不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Android 自定义Dialog类,并在Activity中实现按钮监听。
如果ssl打开,Apache mod auth_ldap将不起作用