Motion Bindable

Build Status Code Climate

A simple two-way data binding library for RubyMotion.


Add this line to your application’s Gemfile:

“by gem ‘motion_bindable’

And then execute:

“ $ bundle

If you want to use the default strategies that come with MotionBindable add this to your app_delegate.rb:

“uby def application(application, didFinishLaunchingWithOptions: launch_options) MotionBindable::Strategies.use true end


ObjectRefers to the parent object that can have many bindings. Usually a model of some sort.
BindingThe connection between an object and it’s bound children. Observes and updates both sides. Represented as a Strategy
BoundUsually an input object, like a UITextField or a Proc.


Add include MotionBindable::Bindable to make an object bindable:



class Item include MotionBindable::Bindable attr_accessor :name attr_accessor :location

def location @address ||= end end

class Address attr_accessor :address end

In your view controller, you can bind the object to a set of Views or any other object:

“by class ItemListViewController def viewDidLoad super @name_field = UITextField.alloc.initWithFrame [[110, 60], [100, 26]] @name_field.placeholder = “Name” view.addSubview @name_field

@address_field = UITextField.alloc.initWithFrame [[110, 100], [100, 26]]
@address_field.placeholder = "Address"
view.addSubview @address_field

@item =
  name: @name_field,
  location: {
    address: @address_field

end end

When @name_field.text or @address_field.text changes, so will your model!

Custom Strategies

The above example uses the MotionBindable::Strategies::UITextField. which comes with MotionBindable. Take a look in lib/motion_bindable/strategies for the available defaults. You can implement your own strategies by extending MotionBindable::Strategy. Please use the existing strategies as a guideline.

Default Strategies

The following strategies come with motion-bindable and are setup when MotionBindable::Strategies.use is called.

NameObject CandidatesDirection
MotionBindable::Strategies::UITextFieldAny UITextFieldTwo-way
MotionBindable::Strategies::ProcAny ProcOne-way


  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request