我想知道实现以下目标的最佳方法是什么。启动时,我的应用程序进入以下表格视图:
选择类别时,将创建到另一个表视图的外观,如下所示:
我要做的是最终在第一个视图中具有“篮子” barButtonItem,以篮子价格的总价进行更新。我还希望按钮在整个导航控制器周期中都可见。
有没有一种方法可以使篮子按钮在导航控制器过程的每个阶段显示?
例如,我想在第二个表格视图中显示按钮。
答案 0 :(得分:2)
是的,您可以使用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
}
}
并在每个viewController的viewWillAppear中调用以下方法
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.addRightButtonItem()
}