gpt4 book ai didi

ios - 在另一个 UIViewController 中处理 UITapGestureRecognizer

转载 作者:行者123 更新时间:2023-11-28 08:08:30 25 4
gpt4 key购买 nike

我试图在另一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com