2017-08-15 3 views
1

Je suis le code de démonstration CardTableView et sa façon d'intégrer les contrôleurs de vue de sorte que le FABMenuController soit au top. Pour une raison quelconque, le code suivant fonctionne, jusqu'à ce que j'essaie d'ajouter le FABController:FABMenuController pour partager le FAB à travers les contrôleurs de vue

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) 

J'ai mis en œuvre le AppFABMenuController tout comme le code de démonstration a, et il existe, et hérite de la FABMenuController de MaterialSwift. Je ne comprends pas pourquoi je reçois l'erreur: fatal error: unexpectedly found nil while unwrapping an Optional value En ce qui concerne la hiérarchie de vue, je pense qu'il est plus logique d'intégrer la SnackbarController dernière, mais même si je fais cela, il échoue encore sur la ligne qui déclare let fabMenuController=...

+0

Qu'est-ce 'MyTeeUpsViewController' fait et pourquoi vous présente les contrôleurs de vue et non les définissant comme la' AppDelegate' de rootViewController? Veuillez décrire un peu plus de vos objectifs de configuration afin que je puisse vous aider :) – CosmicMind

+0

Le contrôleur de vue racine appdelegates est le contrôleur de vue de connexion. Après que l'utilisateur est connecté, il peut voir ses images. Le viewcontroller de teeups a le tiroir de nav, les barres de tabulation de page pour trois genres différents de teeups, le snackbar pour les messages d'erreur de rendu, et le FAB pour créer des teeups – kinghenry14

Répondre

1

Je voudrais l'approche de votre configuration comme ceci:

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) 

Fondamentalement, le NavigationDrawerController doit toujours être le niveau le plus bas, ou la racine de votre pile de vue. Si vous deviez le configurer avec une connexion, vous pourriez configurer le NavigationDrawerController en tant que votre AppDelegates rootViewController, et désactiver les panneaux latéraux. Lorsque l'utilisateur se connecte, vous pouvez appeler navigationDrawerController? .transition (vers: MyNewVC), puis activer les panneaux latéraux. De cette façon, le contrôleur de vue de connexion est hors de la pile et tout est configuré. J'ai mis le ToolbarController en tant qu'enfant du FABMenuController afin que vous puissiez basculer entre les contrôleurs et ajouter un tout nouveau contrôleur de navigation ou le supprimer complètement. L'apparence de Material couvre généralement tout sur l'écran lorsque le menu FABM est affiché. Le Snackbar pourrait aller au-dessus ou au-dessous du menu FABM, mais cela dépend vraiment de vous, visuellement, cela ne devrait jamais faire de différence. Remarque: dans la dernière version de Material 2.9. *, Vous n'avez plus besoin de lancer les types rootViewController et vous n'avez plus besoin de rechercher dans les contrôleurs de vue enfant uniquement pour le contrôleur de transition. Signification, où que vous soyez, vous pouvez maintenant appeler toolbarController?.transition ... etc.

Hope this helps :)

+0

merci! C'était extrêmement utile! – kinghenry14