我希望父母ViewController
处理由其中一个孩子生成的 Target-Actions ViewControllers
。
根据 Apple 文档,这应该可以通过设置并遵循响应者链target
来实现。nil
如果您为目标对象指定 nil,则控件会在响应程序链中搜索定义指定操作方法的对象。https://developer.apple.com/documentation/uikit/uicontrol
但是如何在target
is时编写动作方法签名nil
?
通常,您将函数名称附在#selector()
其中,让您在编译时检查是否存在具有该签名的方法。像这样:
class MyViewController: UIViewController {
override func viewDidLoad() {
self.button.addTarget(self, action: #selector(buttonPressed(sender:)), for: .touchDown)
}
func buttonPressed(sender: UIButton) { }
}
但是因为编译target
器nil
因为找不到它而抱怨:
// ! Use of unresolved identifier "buttonPressed(sender:)"
button.addTarget(nil, action: #selector(buttonPressed(sender:)), for: .touchDown)
我尝试使用字符串初始化选择器,但编译器也抱怨。
// ! String literal is not a valid Objective-C selector
button.addTarget(nil, action: Selector("buttonPressed(sender:)"), for: .touchDown)