我试图将MDC应用程序栏添加到我的应用程序中,该栏由MaterialComponents的自定义子类UINavigationController
定义。我对它们的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
}
}
当我运行该应用程序时,我看到一个普通的导航栏,并且从未调用委托方法。我究竟做错了什么?
最佳答案
经过不同的尝试,我通过创建一个自定义MDCAppBarNavigationController
并将其设置为Storyboard中的UINavigationController
(Identity选项卡-> Class)使它起作用
这是我自定义的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()
}
}
关于ios - 将MDCAppBarNavigationController与 Storyboard一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55304221/