导航控制器中的静态 barButtonItems?
Static barButtonItems in a navigation controller?
我想知道实现以下目标的最佳方法是什么。我的应用程序在启动时转到以下 table 视图:
当您 select 一个类别时,会生成另一个 table 视图的转场,看起来像这样:
我想要做的是,最终让第一个视图中的 'Basket' barButtonItem 更新为篮子数量的总价。我还希望按钮在整个导航控制器周期中可见。
有没有办法让我在导航控制器进程的每个阶段都显示购物篮按钮?
例如,我希望在第二个 table 视图中显示按钮。
是的,您可以通过使用 UINavigationController
的 class 来实现它,如下所示
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 控制器。
第二种方式
扩展 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()
}
我想知道实现以下目标的最佳方法是什么。我的应用程序在启动时转到以下 table 视图:
当您 select 一个类别时,会生成另一个 table 视图的转场,看起来像这样:
我想要做的是,最终让第一个视图中的 'Basket' barButtonItem 更新为篮子数量的总价。我还希望按钮在整个导航控制器周期中可见。
有没有办法让我在导航控制器进程的每个阶段都显示购物篮按钮?
例如,我希望在第二个 table 视图中显示按钮。
是的,您可以通过使用 UINavigationController
的 class 来实现它,如下所示
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 控制器。
第二种方式
扩展 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()
}