gpt4 book ai didi

swift - 添加目标 :action:forControlEvents: selector syntax when target is nil?

转载 作者:可可西里 更新时间:2023-11-01 00:56:53 24 4
gpt4 key购买 nike

我想要一个父 ViewController 来处理由它的一个子 ViewController 生成的 Target-Actions。

根据 Apple 文档,这应该可以通过将 target 设置为 nil 并遵循响应链来实现。

If you specify nil for the target object, the control searches the responder chain for an object that defines the specified action method. https://developer.apple.com/documentation/uikit/uicontrol

但是当targetnil 时,我该如何编写action 方法签名呢?

通常,您将函数名称包含在 #selector() 中,这让您可以在编译时检查是否存在具有该签名的方法。像这样:

class MyViewController: UIViewController {
override func viewDidLoad() {
self.button.addTarget(self, action: #selector(buttonPressed(sender:)), for: .touchDown)
}

func buttonPressed(sender: UIButton) { }

}

但是因为 targetnil 编译器提示因为它找不到它:

// ! 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)

最佳答案

解决方案是在定义类的名称前加上前缀。

    button.addTarget(nil, action: #selector(MyViewController.buttonPressed(sender:)), for: .touchDown)

仅供引用,我通过 this nice blog post from Jan 2016 得到了答案,下载源文件,并让 XCode 将其转换为 Swift 3 语法:-)

关于swift - 添加目标 :action:forControlEvents: selector syntax when target is nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45243095/

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