Sha256: 08f74e6bc56ca827b90d58b4bdf2e7661d2a15eddf0ba0a3e18374ebc5a4d0f5

Contents?: true

Size: 1.86 KB

Versions: 1

Compression:

Stored size: 1.86 KB

Contents

class UIAlertView

  # UIAlertView.alert("title",
  #   message: "help!",
  #   buttons: %w"OK Cancel Go Away",
  #   cancel: proc{ puts "nevermind" },
  #   success: proc{ |pressed| puts "pressed: #{pressed}" },
  #   )
  def self.alert(title, options={}, &block)
    puts options
    puts block
    # create the delegate
    delegate = SugarCube::AlertViewDelegate.new
    delegate.on_success = block || options[:success]
    delegate.on_cancel = options[:cancel]
    delegate.send(:retain)

    args = [title]            # initWithTitle:
    args << options[:message] # message:
    args << delegate          # delegate:

    buttons = options[:buttons] || []
    if buttons.empty?
      # cancelButtonTitle: is first, so check for cancel
      buttons << "Cancel" if options[:cancel]
      # otherButtonTitles:
      buttons << "OK" if options[:success] or buttons.empty?
    elsif buttons.length == 1 and options[:cancel]
      raise "If you only have one button, use a :success handler, not :cancel (and definitely not BOTH)"
    end

    # the button titles.  These are passed to the success handler.
    delegate.buttons = buttons

    # uses localized buttons in the actual alert
    args.concat(buttons.map{ |s| s.localized })
    args << nil  # otherButtonTitles:..., nil

    alert = self.alloc
    alert.send(:"initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:", *args)
    alert.show
    alert
  end

end


module SugarCube
  class AlertViewDelegate
    attr_accessor :buttons
    attr_accessor :on_cancel
    attr_accessor :on_success

    def alertView(alert, didDismissWithButtonIndex:index)
      if on_cancel
        on_cancel.call
      elsif on_success
        if on_success.arity == 0
          on_success.call
        else
          button = buttons[index]
          on_success.call(button)
        end
      end

      self.send(:autorelease)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sugarcube-0.5 lib/sugarcube/uialertview.rb