2016-06-21 4 views
0

Swift 2.2에서 첫 번째 iOS 앱을 개발하고 있는데 다음과 같은 문제가 있습니다. 유틸리티 클래스에서 다른 UIViewController에 의해 호출 된 다음 정적 메서드가 있습니다. 나는이 버튼의 #selector을 연결하는 몇 가지 다른 방법으로 시도하고#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 
} 

그러나 나는 항상 다음과 같은 오류가 있습니다.

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를 구현하지 않습니다. - trouble ahead ahead 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에 방법에 대한 따옴표를 제거 할 수 있습니다. 그것은 작동해야합니다!