Swift UIBarButtonItem选择器不工作

Swift UIBarButtonItem选择器不工作,swift,selector,uibarbuttonitem,Swift,Selector,Uibarbuttonitem,我在导航控制器中嵌入了一个MainViewController,如下所示: 在MainViewController.swift中,我以编程方式添加了两个UIBarButtonItem(左和右): class MainViewController: UIViewController { let rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(onRi

我在导航控制器中嵌入了一个MainViewController,如下所示:

在MainViewController.swift中,我以编程方式添加了两个UIBarButtonItem(左和右):

class MainViewController: UIViewController {

    let rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(onRightClick))
    let leftButton = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(onLeftClick))

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.rightBarButtonItem = rightButton
        navigationItem.leftBarButtonItem = leftButton
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @objc func onRightClick() {
        print("[Main] Right Click")
    }

    @objc func onLeftClick() {
        print("[Main] Left Click")
    }
}

按钮确实显示在屏幕上,但有趣的是,每当我按下左键或右键时,选择器的功能
onLeftClick
onRightClick
都不会被调用。我应该做些什么来让它工作吗?我使用的是Xcode 9.3

尝试一次内部范围

override func viewDidLoad() {
    super.viewDidLoad()

    let rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(self.onRightLeftClick(_ :)))
    rightButton.tag = 1
    let leftButton = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(self.onRightLeftClick(_ :)))
    rightButton.tag = 2
    self.navigationItem.rightBarButtonItem = rightButton
    self.navigationItem.leftBarButtonItem = leftButton
}
按以下方式处理操作:

func onRightLeftClick(_ sender: UIBarButtonItem){
    if sender.tag == 1{
        // rightButton action
    }else{
        // leftButton action
    }
}

您还可以将
lazy
关键字添加到rightButton和leftButton类属性中。这样,
UIBarButtonItem
就不会被实例化(动作选择器也不会尝试被解析),直到它们在类中使用。这样做可以让您在类中的任何位置(而不仅仅是在声明它们的函数中)使用BarButtonims


我编辑了答案。这是正确的,但不能让懒惰。
lazy var rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: #selector(onRightClick))
lazy var leftButton = UIBarButtonItem(title: "Left", style: .plain, target: self, action: #selector(onLeftClick))