Skip to content

Instantly share code, notes, and snippets.

@heriwijoyo
Last active December 20, 2016 08:47
Show Gist options
  • Save heriwijoyo/b6cfc3a8cd21edf5d714ca6f15458ed9 to your computer and use it in GitHub Desktop.
Save heriwijoyo/b6cfc3a8cd21edf5d714ca6f15458ed9 to your computer and use it in GitHub Desktop.
internal class OnboardingViewController: UIViewController {
...
private func pushRegistrationPage() {
let registerViewController = RegisterViewController()
navigationController?.pushViewController(registerViewController, animated: true)
}
private func pushLoginPage() {
let loginViewController = LoginViewController()
navigationController?.pushViewController(loginViewController, animated: true)
}
...
}
class LoginViewController: UIViewController {
...
var onShowNextScreen: (Screen -> Void)?
@IBAction func signUpButtonTapped(sender: UIButton) {
onShowNextScreen?(.Register)
}
func backToPreviousScreen() {
onShowPreviousScreen?()
}
...
}
internal class RegisterViewController: UIViewController {
...
@IBAction func pushLoginPage(sender: AnyObject) {
onShowNextScreen?(.Login)
}
func backToPreviousScreen() {
onShowPreviousScreen?()
}
...
}
class OnboardingFlowController {
...
private func createLoginScreen() -> UIViewController {
let viewController = LoginViewController()
viewController.onShowNextScreen = { [weak self] screen in
if case .Register = screen,
let firstViewController = self?.navigationController.viewControllers.first,
let registerViewController = self?.createRegisterScreen() {
self?.navigationController.setViewControllers([ firstViewController, registerViewController ], animated: true)
return
}
self?.onShowNextScreen?(screen)
}
return viewController
}
private func configureOnShowPreviousScreen() {
onShowPreviousScreen = { [weak self] in
self?.navigationController.popViewControllerAnimated(true)
}
}
...
}
internal class SettingFlowController {
...
private func createLoginScreen() -> UIViewController {
let viewController = LoginViewController()
viewController.onShowNextScreen = { [weak self] screen in
if case .Register = screen,
let firstViewController = self?.navigationController.viewControllers.first,
let registerViewController = self?.createRegisterScreen() {
self?.navigationController.setViewControllers([ firstViewController, registerViewController ], animated: true)
return
}
self?.onShowNextScreen?(screen)
}
return viewController
}
private func configureOnShowPreviousScreen() {
onShowPreviousScreen = { [weak self] in
self?.navigationController.popViewControllerAnimated(true)
}
}
...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment