Ios 导航控制器中的静态按钮?

Ios 导航控制器中的静态按钮?,ios,swift,uinavigationbar,uibarbuttonitem,Ios,Swift,Uinavigationbar,Uibarbuttonitem,我想知道实现以下目标的最佳方法是什么。启动时我的应用程序将转到以下tableview: 选择类别时,将切换到另一个tableview,如下所示: 我想做的是,最终在第一个视图中使用“Basket”barbuttonite来更新篮子金额的总价。我还希望按钮在整个导航控制器循环中可见 有没有一种方法可以让我在navigationcontroller流程的每个阶段都显示篮子按钮 例如,我想让按钮显示在第二个表视图上。是的,您可以通过使用UINavigationController的take类来实现

我想知道实现以下目标的最佳方法是什么。启动时我的应用程序将转到以下tableview:

选择类别时,将切换到另一个tableview,如下所示:

我想做的是,最终在第一个视图中使用“Basket”barbuttonite来更新篮子金额的总价。我还希望按钮在整个导航控制器循环中可见

有没有一种方法可以让我在navigationcontroller流程的每个阶段都显示篮子按钮


例如,我想让按钮显示在第二个表视图上。

是的,您可以通过使用
UINavigationController
的take类来实现它,如下所示

class CustomNavigationController: UINavigationController, UINavigationControllerDelegate{

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    // MARK: Private Functions
    private func addRightBarButtonTo(viewController: UIViewController){    
        barButtonItem = UIBarButtonItem(title: "Basket", style: .plain, target: self, action: #selector(CustomNavigationController.dismiss(_:)))
        viewController.navigationItem.rightBarButtonItem = barButtonItem
    }

    // MARK: UINavigationController Delegate
    func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
        self.addRightBarButtonTo(viewController)
    }

    @objc func dismiss(sender: Any){
        self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
    }
}
使用
CustomNavigationController
作为窗口的rootView控制器

第二条路 获取
UIViewController

extension UIViewController {
    func addRightButtonItem() {
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Basket", style: .done, target: self, action: #selector(barButtonMethod(_:)))
    }
    
    @objc func barButtonMethod(_ sender: UIBarButtonItem) {
        // Your code
    }
}
并在VIEW中调用下面的方法将显示每个viewController的

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
      
        self.addRightButtonItem()
    }

是的,您可以使用
UINavigationController
的take类实现它,如下所示

class CustomNavigationController: UINavigationController, UINavigationControllerDelegate{

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    // MARK: Private Functions
    private func addRightBarButtonTo(viewController: UIViewController){    
        barButtonItem = UIBarButtonItem(title: "Basket", style: .plain, target: self, action: #selector(CustomNavigationController.dismiss(_:)))
        viewController.navigationItem.rightBarButtonItem = barButtonItem
    }

    // MARK: UINavigationController Delegate
    func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
        self.addRightBarButtonTo(viewController)
    }

    @objc func dismiss(sender: Any){
        self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
    }
}
使用
CustomNavigationController
作为窗口的rootView控制器

第二条路 获取
UIViewController

extension UIViewController {
    func addRightButtonItem() {
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Basket", style: .done, target: self, action: #selector(barButtonMethod(_:)))
    }
    
    @objc func barButtonMethod(_ sender: UIBarButtonItem) {
        // Your code
    }
}
并在VIEW中调用下面的方法将显示每个viewController的

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
      
        self.addRightButtonItem()
    }


您是通过编程或使用故事板创建导航控制器的?我使用了一个故事板。好的,您是如何在第一个ViewController上显示篮子的?我已将条形按钮直接拖动到TVC顶部的UINavigationItem中。您是通过编程或使用故事板创建导航控制器的?我使用了一个故事板。好的,如何在第一个ViewController上显示篮框?我已将栏按钮直接拖动到TVC顶部的UINavigationItem中。感谢您的回复;我应该说,我用了一个故事板,把我的按钮直接拖进了第一个TVC。不确定,但我认为你不应该通过故事板来实现它。只有这样才能实现,否则您应该使用UIViewController的扩展,在右侧添加BarButtonItem,并在每个视图控制器中调用此方法。您必须在每个控制器中拖放条项目,或者使用上述代码。。更好的方法是为了可重用性而使用代码好的,这是有道理的。我只是有点困惑,上面的“巴布顿主义”是在哪里产生的?我是否在每个TVC中创建它?我将使用扩展UIViewControllerThanks的第二种方式更新以获得回复;我应该说,我用了一个故事板,把我的按钮直接拖进了第一个TVC。不确定,但我认为你不应该通过故事板来实现它。只有这样才能实现,否则您应该使用UIViewController的扩展,在右侧添加BarButtonItem,并在每个视图控制器中调用此方法。您必须在每个控制器中拖放条项目,或者使用上述代码。。更好的方法是为了可重用性而使用代码好的,这是有道理的。我只是有点困惑,上面的“巴布顿主义”是在哪里产生的?我是否在每个TVC中创建它?我将使用UIViewController扩展的第二种方式进行更新