ios - 导航 Controller 中的静态 barButtonItems?

标签 ios swift uinavigationbar uibarbuttonitem

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

First TVC

当您选择一个类别时,将创建一个到另一个 tableview 的 segue,如下所示:

Second TVC

我想要做的是,最终让第一个 View 中的“篮子”barButtonItem 更新为篮子数量的总价。我还希望按钮在整个导航 Controller 周期中可见。

有没有一种方法可以让导航 Controller 进程的每个阶段都显示篮子按钮?

例如,我希望在第二个表格 View 中显示按钮。

最佳答案

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

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

关于ios - 导航 Controller 中的静态 barButtonItems?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669591/

相关文章:

ios - 未调用 Firebase 奖励视频委托(delegate)方法

ios - 如何清除ImageView?

ios - 如何在没有网络连接的情况下持续出现警报?

swift - Facebook-IOS-SDK pod 安装问题

ios - 自 iOS 11 以来 RefreshControl 刷新后的粘性 UINavigationbar

ios - 我可以将选择器添加到其他类吗?

ios - 对包括导航栏和选项卡栏的 View 进行快照

cocoa-touch - 在给定条件下拦截点击事件

ios - 每次呈现时查看 Controller 原点更改

ios - 如何使键盘在快速单击 TextField 时不弹出?