我正在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
关联到此按钮,但是我总是遇到以下错误。
答案 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
中删除方法的双引号。它应该工作!