2016-06-21 6 views
0

Я разрабатываю свое первое приложение для iOS в Swift 2.2, и у меня есть следующая проблема. В классе утилиты у меня есть следующий статический метод, вызываемый некоторыми разными UIViewController.#selector on UIBarButtonItem

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» не реализует методSignatureForSelector: - проблема впереди Unrecognized selector + [MyUnimol.Utils menuClicked] ' –

+0

@GiovanniGrano Является ли функция menuClicked в классе утилиты или класс контроллера вида? – Code

+0

он находится в том же классе утилиты ('Utils') вышеуказанного метода –

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. Он должен работать!

 Смежные вопросы

  • Нет связанных вопросов^_^