【问题标题】:Swift 3: Unrecognized selector sent to instanceSwift 3:发送到实例的无法识别的选择器
【发布时间】:2017-01-23 09:00:12
【问题描述】:

我的视图类中有一个按钮,试图从一个单独的类中添加一个选择器函数,如下所示:

class ProfileView: UIView {
    createAccountButton.addTarget(self, action: #selector(ProfileViewController.createAccountClicked), for: .touchUpInside)
}

class ProfileViewController: UIViewController {
    func createAccountClicked() {
        print("button press")
    }
}

当我尝试在ProfileView 之外引用此方法时,我遇到了无法识别的选择器错误。但是,当我简单地将 createAccountClicked() 放入 ProfileView 并调用时,它会起作用:

createAccountButton.addTarget(self, action: #selector(self.createAccountClicked), for: .touchUpInside)

相反。我的问题是 - 是否可以从单独的类中调用函数?或者只是将函数放在同一个类中才是正确的设计模式?

【问题讨论】:

  • addTarget 代替self 你需要传递ProfileViewController 的引用。
  • ProfileViewController.self 工作!

标签: swift3 unrecognized-selector addtarget


【解决方案1】:

对于您的问题,请尝试更改如下代码:

class ProfileView: UIView {
    createAccountButton.addTarget(ProfileViewController, action: #selector(ProfileViewController.createAccountClicked), for: .touchUpInside)
}

是否可以从单独的类中调用函数?或者只是将函数放在同一个类中才是正确的设计模式?

是的您可以通过声明类函数或该类的对象从外部调用函数。检查下面的类函数

class ProfileViewController: UIViewController {
 class func someTypeMethod() {
    //body
}
}

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多