web-dev-qa-db-ja.com

swift 3.0UIBarButtonItemアクションが機能しない

let leftbarbuttonitem = UIBarButtonItem(title:"Reset",style: .plain, target: self, action: #selector(tapResetButton(_:)))

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

    }

アクションはクリックイベントに応答できません。ブレークポイントを追加したところ、関数に含まれていませんでした。コードの何が問題なのかわかりません。どんな答えでもいただければ幸いです。前もって感謝します。

11
littlebear333

Swift 3.0

ViewDidLoad())内でUIBarButtonを宣言します

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

func logOut() {
  print("LogOut")
}

UIBarButtonItem OutSide ViewDidLoad()を宣言します

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")
}

viewDidLoad()の外側で完全に宣言する

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

いずれかが機能するはずです。

アクションパラメータとして、ViewController名を明示的に指定するか、単にselfと言うことができます。

action: #selector(self.logOut)
16
Ashok R

UIBarButtonItemの初期化を関数viewDidLoadから外すと、アクションが応答しません。しかし、私がそれを関数に入れると。できます。理由はわかりません。しかし、問題は解決されました。あなたが理由を知っているなら。教えてください。ありがとうございました。

4
littlebear333