我想知道实现以下目标的最佳方法是什么。我的应用程序在启动时转到以下 TableView :
当您选择一个类别时,将创建一个到另一个 tableview 的 segue,如下所示:
我想要做的是,最终让第一个 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/