当前的问题和我想知道的事情

UIBarButtonItem操作方法在某些情况下不起作用。我想知道为什么它不起作用。

情况1

case1 storyboard

刚刚将NavigationController添加到默认的ViewController

import UIKit

class ViewController: UIViewController {

    let okButton = UIBarButtonItem(title: "OK", style: .plain, target: self, action: #selector(okButtonTapped(_:)))

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.rightBarButtonItem = okButton
    }

    @objc func okButtonTapped(_ sender: UIBarButtonItem) {
        print("OK!")
    }
}

在这种情况下,“确定”按钮不起作用。
没有错误信息。

案例2

case2 storyboard

向默认的ViewController添加了导航栏。
UINavigationItem以名称myNavigationItem连接到插座。
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var myNavigationItem: UINavigationItem!

    let okButton = UIBarButtonItem(title: "OK", style: .plain, target: self, action: #selector(okButtonTapped(_:)))

    override func viewDidLoad() {
        super.viewDidLoad()
        myNavigationItem.rightBarButtonItem = okButton
    }

    @objc func okButtonTapped(_ sender: UIBarButtonItem) {
        print("OK!")
    }
}

在这种情况下,“确定”按钮将起作用。

概要

我了解即使在情况1中,如果在viewDidLoad中执行okButton初始化,它也会起作用。
我想知道为什么case2有效,而case1不起作用。

谢谢你

最佳答案

如果在okButton之前初始化viewDidLoad,则无法设置目标self。所以在viewDidLoad中初始化按钮

class ViewController: UIViewController {

    var okButton:UIBarButtonItem?

    override func viewDidLoad() {
        super.viewDidLoad()
        okButton = UIBarButtonItem(title: "OK", style: .plain, target: self, action: #selector(okButtonTapped(_:)))
        self.navigationItem.rightBarButtonItem = okButton
    }

    @objc func okButtonTapped(_ sender: UIBarButtonItem) {
        print("OK!")
    }
}

关于ios - UIBarButtonItem操作方法在某些情况下不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57643852/

10-13 08:44