Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

RubyMotion DSL for UIKit

branch: master
README.md

SimpleView

RubyMotion DSL for UIKit.

Change log

Version 0.6.x

Breaking changes:

Block scoping is removed, i.e. no need to pass in locals.

Previous

class ViewController
  def viewDidLoad
    setup view, controller: self do
      table_view delegate: controller, dataSource: controller
    end
  end
end

Now

class ViewController
  def viewDidLoad
    setup view do
      table_view delegate: self, dataSource: self
    end
  end
end

add is renamed to add_view for clarity.

Installation

Add the gem to your Gemfile

gem 'simple-view'

Then bundle install

Require SimpleView in Rakefile

$:.unshift("/Library/RubyMotion/lib")
require 'motion/project'
require 'simple-view'

Motion::Project::App.setup do |app|
  ...
end

Usage

class YourViewController < UIViewController
  include SimpleView::Layout

  def viewDidLoad
    setup content_view do
      label top:0, left: 0, width: 200, height: 20, text: "Choose your lucky word", text_color: "#eee"
      image_view top: 50, left: 50, right: 50, image: "sample.jpg"
      toolbar left: 0, right: 0, bottom: 0
    end
  end
end

Use block for more control over the view instance

def viewDidLoad
  setup view do
    button tint_color: '#f00' do |button|
      button.setTitle "Submit" forState: UIControlStateNormal
    end
  end
end

UIKit support

SimpleView provides shorthand methods for most UIKit classes

def viewDidLoad
  setup view do
    label text: 'Hi there!' # shorthand
    add_view UILabel, text: 'Hi there!' # same as above
  end
end
  • UIActionSheet via action_sheet
  • UIActivityIndicatorView via activity_indicator
  • UIButton via button
  • UIDatePicker via date_picker
  • UIImageView via image_view
  • UILabel via label
  • UIPageControl via page_control
  • UIPickerView via picker_view
  • UIProgressView via progress_view
  • UIScrollView via scroll_view
  • UISearchBar via search_bar
  • UISegmentedControl via segmented_control
  • UISlider via slider
  • UIStepper via stepper
  • UISwitch via switch
  • UITabBar via tab_bar
  • UITableView via table_view
  • UITableViewCell via table_view_cell
  • UITextField via text_field
  • UITextView via text_view
  • UIToolbar via toolbar
  • UIView via rect
  • UIWebView via web_view

Custom view support

SimpleView can work with any custom views and controls

setup view do
  add_view CustomViewClass, name: "custom_view"...
end

Style Template

Define default style and apply to UI classes automatically

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    SimpleView::Styles.define UILabel,
      font: "italic 13",
      text_color: "#999"
  end
end

class ViewController
  include SimpleView::Layout

  def viewDidLoad
    setup view do
      label text: "Label with default style!"
    end
  end
end

Define custom styles and mix with default style

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    SimpleView::Styles.define UILabel,
      font: "13"

    SimpleView::Styles.define :darkcolor,
      text_color: "#999"

    SimpleView::Styles.define :title,
      font: "bold 15"
  end
end

class ViewController
  include SimpleView::Layout

  def viewDidLoad
    setup view do
      label styles: :darkcolor, text: "13 font with dark color"
      label styles: [:darkcolor, :title], text: "bold 15 font with dark color"
    end
  end
end

View positioning and sizing

Position the view without doing a lot of calculation

setup view do
  toolbar bottom: 10, left: 10, right: 10
end
setup view do
  table_view width: 100.percent, height: 100.percent
end

View tagging with string

Tag view with name string and find them with ease

def viewDidLoad
  setup view do
    label name: 'desc'
    label name: 'price'
  end
end

def someOtherMethod
  price_label = view.find('price')
  desc_label = price_label.sibling('desc')
end
Something went wrong with that request. Please try again.