2016-06-21 64 views
0

我正在Swift 2.2中開發我的第一個iOS應用程序,並且遇到以下問題。 在實用程序類中,我有以下靜態方法,由一些不同的UIViewController調用。UIBarButtonItem上的#selector

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

+3

嘗試不引用它。 – zneak

回答

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 
    } 
} 
+0

我刪除了引號,我沒有編譯錯誤。但是,觸摸按鈕,應用程序崩潰時出現以下消息「MyUnimol.Utils」未實現methodSignatureForSelector: - 前面的問題 無法識別的選擇器+ [MyUnimol.Utils menuClicked]' –

+0

@GiovanniGrano實用程序類中的menuClicked函數或視圖控制器類? – Code

+0

它與上述方法 –

1

Swift 2.2 deprecates using strings for selectors and instead introduces new syntax: #selector. Using #selector will check your code at compile time to make sure the method you want to call actually exists. Even better, if the method doesn’t exist, you’ll get a compile error: Xcode will refuse to build your app, thus banishing to oblivion another possible source of bugs.

所以移除你的方法雙引號中#selector。它應該工作!