Usually in an app, we have these flows: onboarding, login, main. And we usually set OnboardingController
, LoginController
and MainController
as the root view controller respectively depending on the state.
I find it useful to have the MainController
as the container for main flow. It can be a tab controller, swipe menu controller or contains just 1 child view controller. The screens are provided by child view controllers, but the MainController
does the following jobs
- Status bar style
We usually need to call preferredStatusBarStyle
on the parent controller. See https://stackoverflow.com/questions/19022210/preferredstatusbarstyle-isnt-called
- App did become active
Usually when app is brought to foreground, we need to fetch logged in user profile to see if there's changes. We do this by listening to app did become active
in MainController
.
- Mock to open
This can be anti pattern. But in UI Tests, for laziness, we can just use some launch arguments and check to present some specific screens to test, because MainController
is the root for main flow.
- Logout
Because things originate from MainController
, things can terminate in MainController
. We can handle logout
, clear states, and tell MainController
to tell AppDelegate
to switch to another root controller
Original post https://github.com/onmyway133/blog/issues/36
Top comments (0)