Swift3 swift 3.0 UIBarbuttonite行动不起作用

Swift3 swift 3.0 UIBarbuttonite行动不起作用,swift3,uibarbuttonitem,Swift3,Uibarbuttonitem,该操作无法响应单击事件。我添加了断点,然后发现它甚至没有进入函数。我不知道我的代码出了什么问题。任何答复都将不胜感激。提前感谢。当我将UIBarButtonItem的初始化从函数viewDidLoad中移出时,该操作无法响应。但当我把它放到函数中时。它起作用了。我不知道为什么。但问题已经解决了。如果你知道原因的话。请告诉我。多谢各位 Swift 3.0 在ViewDidLoad()中声明UIBarButton 在ViewDidLoad()之外声明UIBarButtonItem 完全在viewDi

该操作无法响应单击事件。我添加了断点,然后发现它甚至没有进入函数。我不知道我的代码出了什么问题。任何答复都将不胜感激。提前感谢。

当我将UIBarButtonItem的初始化从函数viewDidLoad中移出时,该操作无法响应。但当我把它放到函数中时。它起作用了。我不知道为什么。但问题已经解决了。如果你知道原因的话。请告诉我。多谢各位

Swift 3.0

在ViewDidLoad()中声明UIBarButton

在ViewDidLoad()之外声明UIBarButtonItem

完全在viewDidLoad()之外声明

任何方法都应该有效。

对于动作参数,可以明确指定
ViewController
名称,也可以只说
self


您可以在
viewDidLoad()
方法中声明
UIBarButton
项。你的actin方法应该被调用。可能是你遗漏了什么。@Ashok谢谢你的回答。当我将declareUIBarbuttonItem放在viewDidLoad()中时,它就工作了。但是为什么我不能将声明放在viewDidLoad()之外呢?尝试在按钮声明之前添加“lazy”。在函数之外,就在类的主体中,它不会被初始化,因为它显式和隐式地引用了
self
。我认为编译器在这些情况下不会像在其他情况下那样发出警报,这是一个bug。但是,如果您将其声明为
lazy
,它将起作用,因为在访问属性时
self
已完全形成(请参见上面的lazy示例)。谢谢您的回答!我想知道发生了什么事!!你知道为什么uibarbuttonite不同吗?
let leftbarbuttonitem = UIBarButtonItem(title:"Reset",style: .plain, target: self, action: #selector(tapResetButton(_:)))

    func tapResetButton(_ sender:UIBarButtonItem){
        count = 0
        numberLabel.text = "0"

    }
override func viewDidLoad() {
    super.viewDidLoad()
    let logout: UIBarButtonItem = UIBarButtonItem.init(title: "Logout", style: .plain, target: self, action: #selector(ViewController.logOut))
}

func logOut() {
  print("LogOut")
}
var logout:UIBarButtonItem = UIBarButtonItem()

override func viewDidLoad() {
        super.viewDidLoad()
        logout = UIBarButtonItem.init(title: "Logout", style: .plain, target: self, action: #selector(ViewController.logOut))
}

func logOut() {
      print("LogOut")
}
lazy var logout: UIBarButtonItem = {
    UIBarButtonItem.init(title: "Logout", style: .plain, target: self, action: #selector(ViewController.logOut))
}()
action: #selector(self.logOut)