FABMenuController для совместного использования FAB между контроллерами представления

Я следую демонстрационному коду CardTableView и его способу встраивания контроллеров представления так, чтобы FABMenuController был на вершине. По какой-то причине следующий код работает, пока я не попытаюсь добавить FABController:

let tabs = AppPageTabBarController(viewControllers:[InvitedViewController(), CoordinatingViewController(), PastViewController()])
let toolbar = AppToolbarController(rootViewController: tabs)
let root = MyTeeUpsViewController(rootViewController: toolbar, leftViewController: NavDrawerContainerController())
let snackBarController = AppSnackbarController(rootViewController: root)
let fabMenuController = AppFABMenuController(rootViewController: snackBarController)
self.present(fabMenuController, animated: true)

Я реализовал AppFABMenuController так же, как и демонстрационный код, и он существует, и наследуется от FABMenuController из MaterialSwift. Я не могу понять, почему я получаю ошибку: fatal error: unexpectedly found nil while unwrapping an Optional value Что касается иерархии представлений, я думаю, что имеет больше смысла встраивать SnackbarController последним, но даже если я делаю это, он все равно терпит неудачу в строке, которая объявляет let fabMenuController=...

1 ответ

Решение

Я хотел бы подойти к вашей настройке так:

let tabs = AppPageTabBarController(viewControllers:[InvitedViewController(), CoordinatingViewController(), PastViewController()])
let toolbar = AppToolbarController(rootViewController: tabs)
let fabMenuController = AppFABMenuController(rootViewController: toolbar)
let snackBarController = AppSnackbarController(rootViewController: fabMenuController)
let navDrawer = MyTeeUpsViewController(rootViewController: snackBarController, leftViewController: NavDrawerContainerController())
self.present(navDrawer, animated: true)

По сути, NavigationDrawerController всегда должен иметь самый низкий уровень или корень вашего стека представлений. Если вы хотите настроить это с помощью имени входа, вы можете настроить NavigationDrawerController в качестве вашего AppDelegates rootViewController и отключить боковые панели. Когда пользователь успешно войдет в систему, вы можете вызвать navigationDrawerController?.Transition(to: MyNewVC) и затем включить боковые панели. Таким образом, контроллер представления входа в систему выключен, и все настроено. Я поместил ToolbarController как дочерний элемент FABMenuController, чтобы вы могли переключаться между контроллерами и либо добавлять совершенно новый топовый контроллер навигации, либо полностью его удалять. Внешний вид материала обычно покрывает все на экране, когда отображается FABMenu. Снэк-бар может быть выше или ниже FABMenu, но это действительно ваше дело, визуально это не должно иметь никакого значения.

Как примечание, в последнем материале 2.9.* Вам больше не нужно приводить типы rootViewController, и вам больше не нужно искать в контроллерах дочерних представлений только переходящий контроллер. То есть теперь вы можете звонить toolbarController?.transition... так далее.

Надеюсь это поможет:)

Другие вопросы по тегам