如何在导航栏中添加3个按钮,将这些按钮转发到其他屏幕或视图控制器?

时间:2018-04-06 04:27:33

标签: ios swift uinavigationbar uibarbuttonitem

有人可以告诉我如何在导航栏中显示3个按钮,它会显示在所有屏幕或视图控制器中吗?我想在单个类中创建它并在所有视图控制器中调用该类。我不知道如何使用它。

3 个答案:

答案 0 :(得分:1)

您可以添加将被视为全局视图的容器视图。

答案 1 :(得分:1)

以下是您可以使用的方法

NavButton类:

import Foundation
import UIKit

protocol navProtocol : class {
    func button1()
    func button2()
    func button3()
}

class navButtons
{
    var navBtn1 = UIBarButtonItem()
    var navBtn2 = UIBarButtonItem()
    var navBtn3 = UIBarButtonItem()
    var navProtocolObj : navProtocol?

    static var shared = navButtons()

    func createButtonView() -> (UIBarButtonItem,UIBarButtonItem,UIBarButtonItem)
    {
        navBtn1 = UIBarButtonItem(title: "btn1", style: UIBarButtonItemStyle.plain, target: self, action: #selector(navButtons.button1Action(sender:)))
        navBtn2 = UIBarButtonItem(title: "btn2", style: UIBarButtonItemStyle.plain, target: self, action: #selector(navButtons.button2Action(sender:)))
        navBtn3 = UIBarButtonItem(title: "btn3", style: UIBarButtonItemStyle.plain, target: self, action: #selector(navButtons.button3Action(sender:)))

        return (navBtn1,navBtn2,navBtn3)
    }


    @objc func button1Action(sender:UIBarButtonItem){
        navProtocolObj?.button1()
    }
    @objc func button2Action(sender:UIBarButtonItem){
        navProtocolObj?.button2()
    }
    @objc func button3Action(sender:UIBarButtonItem){
        navProtocolObj?.button3()
    }
}

在您希望执行所有这些操作的目的地

 import UIKit

class SourceVC: UIViewController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()
        let buttonAdded = navButtons.shared.createButtonView()
        navButtons.shared.navProtocolObj = self
        self.navigationItem.rightBarButtonItems = [buttonAdded.0,buttonAdded.1,buttonAdded.2]
    }

}

extension SourceVC : navProtocol {
    @objc func button1() {
        print("Button 1 Tapped")
    }

    func button2() {
        print("Button 2 Tapped")
    }

    func button3() {
        print("Button 3 Tapped")
    }    
}

上面的模拟器输出: enter image description here

上面的控制台输出: enter image description here

答案 2 :(得分:0)

创建一个名为BaseVC的类。这将是您的BaseViewController类。自定义它并以编程方式在其导航栏中添加3个按钮。

现在,在每个其他视图控制器中扩展此类,然后就完成了。