0.01
No commit activity in last 3 years
No release in over 3 years
An small library to create wizard like views controllers
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.3
>= 0
 Project Readme

UNMAINTAINED PROJECT
I stopped developing in RubyMotion long time ago and can no longer maintain the project.

Motion-Wizard

A small gem to create clean wizard-like views

Sample 1 Sample 2

Installation

gem install motion-wizard

# or in Gemfile
gem 'motion-wizard'

How to use it

Your custom wizard view controller will inherit from MotionWizard::WizardViewController.

With the steps class method, you specify which view controllers will describe your wizard.

class Wizard1ViewController < MotionWizard::WizardViewController
  steps Step1ViewController,
        Step2ViewController,
        Step3ViewController,
        Step4ViewController
end

Moving through steps

The WizardViewController will create instances of your steps controllers which will then be extended with the MotionWizard::ContentController module. This module gives you the following methods which can be used inside your steps:

  • #next(data): Will move to the next step. It will call #finish if there is no following step.
  • #previous(data): Will move to the previous step. If already on the first step, this method will do nothing.
  • #go_to_step(step_number, data): Will go to the selected step.
  • #finish(data): Will call the #when_finished method on the wizard view controller

When moving through steps, you can pass an optional hash parameter with custom data that will get merged into a common wizard hash. You can access this hash inside your steps with the #wizard_data method.

class Step1ViewController
    ...

    def viewWillAppear(animated)
      super
      @button.on(:touch){ self.next(step_1_text: "Awesome!") }
    end

    ...
end

Your wizard view controller class can define a #when_finished method that will get called when any of the steps view controller call #finish or #next when already on the last step. Within this method you have also access to wizard_data.

class Wizard1ViewController < MotionWizard::WizardViewController
    def when_finished
        NSLog "You can access your data here #{wizard_data}"
    end
end

Customizing Index Views

By default, index views will be instances of MotionWizard::IndexItem. This view has a label_wrapper (UIView) subview, which has a label (UILabel) subview.

It also defines two methods when_selected and when_unselected that allow to subscribe a block to be called whenever the current step changes.

You can customize the default index view appearance and behaviour by defining the set_up_index_item_at(index_item, index) method inside your WizardViewController subclass (see sample Nr 1).

class Wizard1ViewController < MotionWizard::WizardViewController
  def setup_index_item_at(index_item, index)
    layout(index_item, :index_item)
    index_item.label.text = "ABCD"[index]
  end
end

If you would rather use a custom index item class instead of the default one, you can register it using the index_item_view_class class method inside your WizardViewController subclass definition.

Your custom class can define the methods #select and #unselect to be called whenever the wizard changes the current step.

(see sample Nr 2)