我试图在另一个 UIViewController 中处理手势,但程序崩溃了。我想在第二个 UIViewController 中调用 handleTap 函数。
这是我想做的,但它崩溃了(错误消息:无法识别的选择器发送到类):
class ViewController: UIViewController {
override func viewDidLoad() { super.viewDidLoad()
Second.showMenu(self)
}
}
public class Second: UIViewController {
static func showMenu(_ vc: ViewController) {
let bgView = UIView(frame: vc.view.frame)
vc.view.addSubview(bgView)
let tap = UITapGestureRecognizer(target: self, action:#selector(self.handleTap(sender:)))
bgView.isUserInteractionEnabled = true
bgView.addGestureRecognizer(tap)
}
func handleTap(sender: UITapGestureRecognizer) {
print("handleTap")
}
}
这可行,但我希望能够处理第二个 UIViewController 中的所有内容:
class ViewController: UIViewController {
override func viewDidLoad() { super.viewDidLoad()
Second.showMenu(self)
}
func handleTap(sender: UITapGestureRecognizer) {
print("handleTap")
}
}
public class Second: UIViewController {
static func showMenu(_ vc: ViewController) {
let bgView = UIView(frame: vc.view.frame)
vc.view.addSubview(bgView)
let tap = UITapGestureRecognizer(target: vc, action:#selector(vc.handleTap(sender:)))
bgView.isUserInteractionEnabled = true
bgView.addGestureRecognizer(tap)
}
}
最佳答案
这个函数:
static func showMenu(_ vc: ViewController) {}
是一个静态函数。这意味着它不是在 View Controller 的实例上执行,而是在类本身上执行。您添加了一个手势识别器:
let tap = UITapGestureRecognizer(target: self, action:#selector(self.handleTap(sender:)))
target:self 表示选择器在类上调用,但handleTap 函数不是静态的。一个简单的解决方法是将其设为静态函数:
static func handleTap(sender: UITapGestureRecognizer) {
print("handleTap")
}
但我认为它仍然没有意义,即使它有效。我很难想象你需要执行一个选择器作为另一个 View Controller 中生成的事件的响应的情况。
关于ios - 在另一个 UIViewController 中处理 UITapGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44400372/