我通过我的视图控制器调用,如:
Util().nav(self.navigationItem)
班级是:
class Util: NSObject {
// MARK: - Initialization
override init() {
super.init()
}
func nav(navigationItem: UINavigationItem){
let leftBackArrow = UIBarButtonItem(title: "A", style: .Plain, target: self, action: "backPress:")
navigationItem.leftBarButtonItem = leftBackArrow;
leftBackArrow.image = UIImage(named: "nav_back")
}
func backPress(sender: UIBarButtonItem){
print("HI")
}
}
答案 0 :(得分:2)
这是一个经典问题。请注意,ARC需要查看对Utils对象的强引用。但在这种情况下,发生的是,您正在实例化并调用方法。但是,ARC会认为这个对象可以从定义了这个对象的范围出来,它将释放正在创建的临时Utils对象。这就是为什么你的行动永远不会被召唤的原因。
要解决这个问题,不要将函数作为成员函数,而是将它们作为类函数 -
class Util: NSObject {
class func nav(navigationItem: UINavigationItem){
let leftBackArrow = UIBarButtonItem(title: "A", style: .Plain, target: self, action: "backPress:")
navigationItem.leftBarButtonItem = leftBackArrow;
leftBackArrow.image = UIImage(named: "nav_back")
}
class func backPress(sender: UIBarButtonItem){
print("HI")
}
}
现在您可以将其用作:
Util.nav(self.navigationItem)
HTH