1

我正在关注 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,就像演示代码一样,它存在,并从 MaterialSwift 的 FABMenuController 继承。我不明白为什么会出现错误:fatal error: unexpectedly found nil while unwrapping an Optional value 关于视图层次结构,我认为最后嵌入 SnackbarController 更有意义,但即使我这样做,它仍然会在声明的行上失败let fabMenuController=...

4

1 回答 1

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 时,Material 的外观通常会覆盖屏幕上的所有内容。Snackbar 可以高于或低于 FABMenu,但这在视觉上取决于你,

请注意,在最新的 Material 2.9.* 中,您不再需要强制转换 rootViewController 类型,并且不再需要在子视图控制器中仅搜索过渡控制器。意思是,你现在可以从任何地方调用toolbarController?.transition... 等等。

希望这可以帮助 :)

于 2017-08-16T23:24:23.303 回答