Использование MDCAppBarNavigationController с раскадровкой - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь добавить панель приложения MDC в свое приложение, как это определено пользовательским подклассом MaterialComponents UINavigationController.Я перехожу к краткому описанию на их странице Github :

Самый простой путь интеграции для использования панели приложения - через 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
  }
}

Когда я запускаю приложение, я вижу обычную панель навигации и метод делегата никогда не вызывается.Что я делаю не так?

1 Ответ

1 голос
/ 16 апреля 2019

После разных попыток я заставил его работать, создав пользовательский 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()
  }
}
...