Swift:AddGestureRecognitor在课堂上不工作
我的班级:Swift:AddGestureRecognitor在课堂上不工作,swift,uigesturerecognizer,unrecognized-selector,Swift,Uigesturerecognizer,Unrecognized Selector,我的班级: class SelectBox { internal static func openSelector(list:[String: String], parent:UIView){ print("iosLog HELLO") parent.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleClick(sender:))))
class SelectBox {
internal static func openSelector(list:[String: String], parent:UIView){
print("iosLog HELLO")
parent.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleClick(sender:))))
}
@objc func handleClick(sender: UITapGestureRecognizer) {
print("iosLog CLICK")
}
}
设置视图:
SelectBox.openSelector(list: AppDelegate.stateList, parent: bgPlaceInto)
启动后打印HELLO
,但单击view
后,我发现以下错误:
2018-07-07 18:39:12.298322+0430 Ma[971:260558][ChatService]:SMT:
2018-07-07 18:39:12.470392+0430
Ma[971:260525][ChatService]:RCV:2018-07-07 18:39:12.471851+0430
Ma[971:260591][ChatService]:RCV:
2018-07-07 18:39:14.674675+0430毫安[971:260392]***
警告:“Ma.SelectBox”类的对象0x100a9fc70未实现
methodSignatureForSelector:--无法识别的选择器出现故障
+[Ma.SelectBox handleClickWithSender:]2018-07-07 18:39:14.675210+0430 Ma[971:260392]无法识别的选择器+[Ma.SelectBox
手舔带柄:]
如何将click listener设置为按类查看
谢谢您的
openSelector
方法是静态的。在静态上下文中,单词self
指的是周围类型的元类型的实例。在这种情况下,选择orbox.Type
显然,SelectorBox.Type
没有handleClick
方法SelectorBox
does
您需要使openSelector
方法非静态:
internal func openSelector(list:[String: String], parent:UIView){
print("iosLog HELLO")
parent.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleClick(sender:))))
}
现在,self
引用了SelectorBox
实例
你可以这样称呼它:
// declare this at class level:
let box = SelectorBox()
// call the method like this
box.openSelector()
class ViewControllerPage: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet var bgGenderInto: UIView!
let box = SelectBox()
override func viewDidLoad() {
super.viewDidLoad()
box.openSelector(list: AppDelegate.genderList, parent: bgGenderInto)
}
}
编辑:您的类应如下所示:
// declare this at class level:
let box = SelectorBox()
// call the method like this
box.openSelector()
class ViewControllerPage: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet var bgGenderInto: UIView!
let box = SelectBox()
override func viewDidLoad() {
super.viewDidLoad()
box.openSelector(list: AppDelegate.genderList, parent: bgGenderInto)
}
}
您是否使用了“isUserInteractionEnabled=true”尝试将
SelectBox
标记为@objc
?您需要将handleClick
设置为静态,因为openSelector
中的self
是类,而不是类的实例。@V_rohit where?@Sweeper是,但不是work@ComputerIm你能描述一下发生了什么事吗?有任何错误消息吗?只有我收到iosLog HELLO
error,单击parent
,但没有work@ComputerIm你记得把框放在班级级别吗?也就是说,在任何方法之外我的类:class SelectBox{internal func openSelector(list:[String:String],parent:UIView){print(“iosLog HELLO”)parent.addgestureRecognitizer(uitagestureRecognitiser)(目标:self,动作:#选择器(handleClick(sender:))}@objc func handleClick(sender:uitagestureRecognitiser){print(“iosLog CLICK”)}
my code:let box=SelectBox()box.openSelector(list:AppDelegate.genderList,parent:bgenderisto)
@ComputerIm这个“我的代码”在哪里?在一个方法中,对吗?如果不起作用,您需要将框移动到该方法之外。