UIBarButtonItem选择器不起作用

问题描述 投票:1回答:1

我有一个嵌入导航控制器的MainViewController,如下所示: enter image description here

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

按钮确实显示在屏幕上,但有趣的是,每当我按下向左或向右按​​钮时,选择器功能onLeftClickonRightClick都不会被调用。我有什么办法让它有效吗?我正在使用Xcode 9.3。

swift selector uibarbuttonitem
1个回答
6
投票

尝试使用内部范围一次

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.