导航控制器中的静态 barButtonItems?

Posted

技术标签:

【中文标题】导航控制器中的静态 barButtonItems?【英文标题】:Static barButtonItems in a navigation controller? 【发布时间】:2018-08-03 09:33:14 【问题描述】:

我想知道实现以下目标的最佳方法是什么。我的应用程序在启动时会转到以下表格视图:

当您选择一个类别时,会转到另一个 tableview,如下所示:

我想要做的是最终在第一个视图中使用“篮子”barButtonItem 来更新篮子数量的总价格。我还希望按钮在整个导航控制器循环中都可见。

有没有办法让我在导航控制器过程的每个阶段都显示篮子按钮?

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

【问题讨论】:

您以编程方式或使用情节提要创建了导航控制器? 我使用了故事板。 好的,你是如何在第一个 ViewController 上显示篮子的? 我已将条形按钮直接拖到 TVC 顶部的 UINavigationItem 中。 【参考方案1】:

是的,您可以通过使用 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作为Window的rootView Controller。

第二种方式

UIViewController

extension UIViewController 
    func addRightButtonItem() 
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Basket", style: .done, target: self, action: #selector(barButtonMethod(_:)))
    
    
    @objc func barButtonMethod(_ sender: UIBarButtonItem) 
        // Your code
    

并在每个viewController的viewWillAppear中调用下面的方法

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

【讨论】:

感谢您的回复;我应该说,我使用了一个故事板并将我的 barbutton 直接拖到了第一个 TVC 中。 不确定,但我认为您不应该通过情节提要来实现它。只有这样才能实现,否则你应该扩展 UIViewController 并在右侧添加 BarButtonItem 并在每个视图控制器中调用此方法。 要么您必须在每个控制器中拖放条形项目,要么使用上述代码。更好的方法是使用代码实现可重用性目的 好吧,这很有道理。我对上面创建的“barButtonItem”的位置有点困惑?我是否在每个 TVC 中创建它? 我会用第二种方式更新 UIViewController 的扩展

以上是关于导航控制器中的静态 barButtonItems?的主要内容,如果未能解决你的问题,请参考以下文章