use*_*097 2 uitapgesturerecognizer swift
我不得不创建一个新线程bcoz它让我发疯,所有其他在线答案都完全一样.我已经无数次地完成了这件事,但我无法看到我为生命而失踪的东西.我正在使用"测试"视图控制器只是为了让轻敲手势工作,但它根本不起作用...我相当确定我正确设置它,因为这是我一直在实现它的方式过去:(是的,我已经选中了isUserInteractionEnabled的方框).我甚至在一个不同的viewcontroller上以这种方式实现它,它正在工作......
class TestViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.addGestureRecognizer(tap)
}
let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
@objc func wasTapped() {
print("tapped")
}
Run Code Online (Sandbox Code Playgroud)
}
我也尝试将参数添加到wasTapped:
@objc func wasTapped(gestureRecognizer: UITapGestureRecognizer) {
print("tapped")
}
Run Code Online (Sandbox Code Playgroud)
mat*_*att 13
你是说:
override func viewDidLoad() {
super.viewDidLoad()
view.addGestureRecognizer(tap)
}
let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
Run Code Online (Sandbox Code Playgroud)
问题是最后一行:
let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
Run Code Online (Sandbox Code Playgroud)
你不能只是let tap在偏僻的地方那样说。您正在隐式地创建一个实例属性。但是您不能以 为目标初始化实例属性self,因为self在初始化实例属性时不存在。(我认为该代码甚至可以编译为错误,并已将其报告为错误。)
将该行移动到 的开头viewDidLoad,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
view.addGestureRecognizer(tap)
}
Run Code Online (Sandbox Code Playgroud)
尝试这样的事情
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped(sender:)))
tap.numberOfTapsRequired = 1 // Default value
view.isUserInteractionEnabled = true
view.addGestureRecognizer(tap)
}
@objc func wasTapped(sender: UITapGestureRecognizer) {
print("tapped")
}
Run Code Online (Sandbox Code Playgroud)