【问题标题】:Using MDCAppBarNavigationController with storyboard将 MDCAppBarNavigationController 与情节提要一起使用
【发布时间】:2019-03-22 16:43:04
【问题描述】:

我正在尝试按照 MaterialComponents 的 UINavigationController 的自定义子类将 MDC 应用栏添加到我的应用中。我在他们的Github page 上进行了简洁的描述:

使用应用栏最简单的集成路径是通过 MDCAppBarNavigationController。此 API 是 UINavigationController 的子类,它会自动将 MDCAppBarViewController 实例添加到每个推送到它的视图控制器上,除非已经存在应用栏或灵活标题。

使用 MDCAppBarNavigationController 时,您至少需要使用委托配置添加的应用栏的背景颜色。

navigationController.pushViewController(<#T##viewController: UIViewController##UIViewController#>, animated: <#T##Bool#>)

// MARK: MDCAppBarNavigationControllerDelegate

func appBarNavigationController(_ navigationController: MDCAppBarNavigationController,
                                willAdd appBarViewController: MDCAppBarViewController,
                                asChildOf viewController: UIViewController) {
  appBarViewController.headerView.backgroundColor = <#(UIColor)#>
}

在我的故事板中,我添加了一个UINavigationController,并在身份检查器中将其身份设置为MDCAppBarNavigationController

在我的根视图控制器中,我实现了MDCAppBarNavigationControllerDelegate

class MyViewController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    title = "My app"
    if let nav = navigationController as? MDCAppBarNavigationController {
      print("[MyViewController] Setting delegate MDCAppBarNavigationControllerDelegate")
      nav.delegate = self
    }
  }

  // MARK: MDCAppBarNavigationControllerDelegate
  func appBarNavigationController(_ navigationController: MDCAppBarNavigationController,
                                    willAdd appBarViewController: MDCAppBarViewController,
                                    asChildOf viewController: UIViewController) {
      print("Setting app bar color")
      appBarViewController.headerView.backgroundColor = .red
  }
}

当我运行应用程序时,我看到了一个普通的导航栏,并且从未调用过委托方法。我做错了什么?

【问题讨论】:

    标签: ios swift uinavigationcontroller mdc-components


    【解决方案1】:

    经过不同的尝试后,我通过创建自定义 MDCAppBarNavigationController 并将其设置为我的故事板中的 UINavigationController(身份选项卡 -> 类)来使其工作

    这是我的自定义 MDCAppBarNavigationController:

    import MaterialComponents.MDCAppBarNavigationController
    
    class MaterialNavigationController: MDCAppBarNavigationController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            delegate = self
        }
    }
    
    extension MaterialNavigationController: MDCAppBarNavigationControllerDelegate {
      func appBarNavigationController(_ navigationController: MDCAppBarNavigationController, willAdd appBarViewController: MDCAppBarViewController, asChildOf viewController: UIViewController) {
    
        appBarViewController.applyTheme()
        appBarViewController.navigationBar.applyTheme()
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2013-12-25
      相关资源
      最近更新 更多