为什么添加barBarttonItem如果在添加它的范围之外创建将无效?

问题描述 投票:0回答:2

我在添加barButtons时遇到了一些问题,并在另一个question的答案中找到了解决方案,但它没有解释为什么你必须在同一范围内创建和添加按钮。我想知道为什么你不能在类级别创建按钮并将它们添加到viewDidLoad之类的方法中。以下复制的问题不起作用的示例代码:

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
}

这会得到一个无法识别@objc方法的错误(此处未包含)。这些方法没有任何问题,因为当您在viewDidLoad中移动按钮创建时,错误消失并且代码正常工作。

ios swift uibarbuttonitem target-action
2个回答
4
投票

这些条形按钮属性是在调用init之前创建的,并且您正在尝试访问在调用init之前无法调用的类方法。

如果要在类范围上初始化按钮,则必须使它们成为lazy变量,以便在需要时创建它们

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

-1
投票
     override func viewDidLoad() {
        super.viewDidLoad()

        let leftBarButton = UIBarButtonItem(title: "Left Button", style: .plain, target: self, action: #selector(pressOnleftBarButton))
        navigationItem.leftBarButtonItem = leftBarButton

        let rightBarbutton = UIBarButtonItem(title: "Right Button", style: .plain, target: self, action: #selector(pressOnRightBarButton))
        navigationItem.rightBarButtonItems = rightBarbutton
    }

    @objc func pressOnleftBarButton(){
      //Perform Action on Left Button
    }

    @objc func pressOnRightBarButton(){
        //Perform Action on right Button
    }
© www.soinside.com 2019 - 2024. All rights reserved.