Giter VIP home page Giter VIP logo

wizardry's Introduction

Wizardry

wizard

A reusable way to allow users to perform a multipart task in your iOS app, written in Swift.

sign up wizard demo

The demo implements a wizard that allows users to sign up to use an app.

Classes in the framework make no assumption about, nor impose restrictions upon, your wizard's visual design.

Important functionality in the wizard framework has thorough unit test coverage.

How to use it

Wizard Step View Controllers

Create a UIViewController subclass for every step/screen in your wizard.

Example: UsernameStepViewController

Wizard Steps

For every step in your wizard, create a type that adopts the WizardStep protocol. An instance of this type owns a wizard step view controller and collects & processes user input for that view controller.

Example: UsernameWizardStep

Note: It is possible to have wizard step view controllers adopt the WizardStep protocol, if preferred.

Data Source

Adopt the WizardDataSource protocol to determine the order in which a user will view your wizard steps.

Example: SignUpWizardDataSource

Wizard View Controller

Subclass WizardViewController and implement your custom UI design to navigate between wizard step views. You will need to override three methods:

func navigateToInitial(wizardStep: WizardStep)    
func navigateToNext(wizardStep: WizardStep, placement: WizardStepPlacement)
func navigateToPrevious(wizardStep: WizardStep, placement: WizardStepPlacement)

Example: SignUpWizardViewController

Show The Wizard

Create your wizard view controller and configure it with your custom data source before presenting it to the user.

@IBAction func handleShowSignUpWizardButton(sender: UIButton) {
    let storyboard = UIStoryboard(name: "SignUpWizard", bundle: nil)
    let signUpWizardVC = storyboard.instantiateInitialViewController() as! SignUpWizardViewController
    let model = SignUpWizardModel()
    let dataSource = SignUpWizardDataSource(model: model)
    
    signUpWizardVC.configureWith(dataSource, completionHandler: { [weak self] (canceled: Bool) in
        print("Completed sign up wizard. canceled = \(canceled)")
        self?.dismissViewControllerAnimated(true, completion: nil)
        })

    presentViewController(signUpWizardVC, animated: true, completion: nil)
}

Example: ViewController

wizardry's People

Contributors

ijoshsmith avatar nidegen avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.