FABMenuController在视图控制器之间共享FAB

时间:2017-08-15 21:42:48

标签: cosmicmind material-swift

我正在关注CardTableView演示代码及其嵌入视图控制器的方式,以便FABMenuController位于顶部。出于某种原因,以下代码有效,直到我尝试添加FABController:

  ...
  "dependencies": {
     ...
  },
  ...

  "jest": {
    "globals": {
      "__TEST__": true
    },
    "moduleNameMapper": {
      "\\.(css|jpg|png)$": "<rootDir>/empty-module.js",
      "^raw-loader": "<rootDir>/empty-module.js"
    },
    "testPathIgnorePatterns": [
      "/node_modules/"
    ],
    "verbose": true
  }
}

我已经实现了AppFABMenuController,就像演示代码一样,并且它存在,并且继承自MaterialSwift的FABMenuController。我无法理解为什么会收到错误: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) 关于视图层次结构,我认为最后嵌入SnackbarController更有意义,但即使我这样做,它仍然在声明fatal error: unexpectedly found nil while unwrapping an Optional value的行上失败

1 个答案:

答案 0 :(得分: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时屏幕上的所有内容。 Snackbar可以高于或低于FABMenu,但这完全取决于你,在视觉上,它不应该有所作为。

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

希望这会有所帮助:)