UIBarButtonItem上的#selector

时间:2016-06-21 17:39:40

标签: ios swift selector uibarbuttonitem

我正在Swift 2.2中开发我的第一个iOS应用程序,我有以下问题。 在实用程序类中,我有以下静态方法,由一些不同的UIViewController调用。

static func setNavigationControllerStatusBar(myView: UIViewController, title: String, color: CIColor, style: UIBarStyle) {
    let navigation = myView.navigationController!
    navigation.navigationBar.barStyle = style
    navigation.navigationBar.barTintColor = UIColor(CIColor: color)
    navigation.navigationBar.translucent = false
    navigation.navigationBar.tintColor = UIColor.whiteColor()
    myView.navigationItem.title = title

    let menuButton = UIBarButtonItem(image: UIImage(named: "menu"),
                                 style: UIBarButtonItemStyle.Plain ,
                                 target: self, action: #selector("Utils.menuClicked(_:)"))

    myView.navigationItem.leftBarButtonItem = menuButton
}

func menuClicked(sender: UIButton!) {
    // do stuff
}

我正在尝试以某种不同的方式将#selector关联到此按钮,但是我总是遇到以下错误。

enter image description here

2 个答案:

答案 0 :(得分:1)

没有引号。

#selector(Utils.menuClicked(_:))

func menuClicked应该在您的视图控制器类中。但如果由于某种原因它不是,你可以做

class Utils {
    static let instance = Utils()

    let menuButton = UIBarButtonItem(image: UIImage(named: "menu"),
                                     style: UIBarButtonItemStyle.Plain ,
                                     target: Utils.instance, action: #selector(Utils.menuClicked(_:)))

    @objc func menuClicked(sender: UIBarButtonItem) {
        // do stuff
    }
}

答案 1 :(得分:1)

  

Swift 2.2不赞成使用选择器的字符串,而是引入了新的语法:#selector。   使用#selector将在编译时检查您的代码,以确保您要调用的方法确实存在。更好的是,如果该方法不存在,您将收到编译错误:Xcode将拒绝构建您的应用程序,因此无法忘记另一个可能的错误来源。

因此,请在#selector中删除方法的双引号。它应该工作!