class Formotion::RowType::DateRow

Public Instance Methods

after_build(cell) click to toggle source
# File lib/formotion/row_type/date_row.rb, line 41
def after_build(cell)
  self.row.text_field.inputView = self.picker
  # work around an iOS7 bug: http://bit.ly/KcwKSv
  if row.picker_mode == :countdown
    self.picker.setDate(self.picker.date, animated:true)
    picker.countDownDuration = self.row.value.to_f
  end

  update
end
date_value() click to toggle source
# File lib/formotion/row_type/date_row.rb, line 17
def date_value
  value = self.row.value
  if value.is_a? Numeric
    Time.at value
  else
    nil
  end
end
formatted_value() click to toggle source
# File lib/formotion/row_type/date_row.rb, line 87
def formatted_value
  if self.date_value
    return case self.row.picker_mode
      when :time
        old_date_style = formatter.dateStyle
        formatter.dateStyle = NSDateFormatterNoStyle
        formatter.timeStyle = NSDateFormatterShortStyle
        formatted = formatter.stringFromDate(self.date_value)
        formatter.dateStyle = old_date_style
        formatter.timeStyle = NSDateFormatterNoStyle
        formatted
      when :date_time
        old_date_style = formatter.dateStyle
        formatter.dateStyle = NSDateFormatterShortStyle
        formatter.timeStyle = NSDateFormatterShortStyle
        formatted = formatter.stringFromDate(self.date_value)
        formatter.dateStyle = old_date_style
        formatter.timeStyle = NSDateFormatterNoStyle
        formatted
      when :countdown
        time = self.row.value
        date = NSDate.dateWithTimeIntervalSinceReferenceDate(time)
        old_date_style = formatter.dateStyle
        old_time_zone = formatter.timeZone

        formatter.dateFormat = "HH:mm"
        formatter.timeZone = NSTimeZone.timeZoneForSecondsFromGMT(0)
        formatted = formatter.stringFromDate(date)

        formatter.dateStyle = old_date_style
        formatter.timeZone = old_time_zone
        formatter.dateFormat = nil
        formatted
      else
        formatter.stringFromDate(self.date_value)
      end
  end
  self.row.value
end
formatter() click to toggle source
# File lib/formotion/row_type/date_row.rb, line 26
def formatter
  @formatter ||= begin
    formatter = NSDateFormatter.new

    date_style = self.row.format
    if date_style && date_style.to_s[-5..-1] != "style"
      date_style = (date_style.to_s + "_style").to_sym
    end

    formatter.dateStyle = self.row.send(:const_int_get, "NSDateFormatter", date_style || NSDateFormatterShortStyle)
    formatter.timeStyle = NSDateFormatterNoStyle
    formatter
  end
end
on_change(text_field) click to toggle source

overwrite Character on_change method

# File lib/formotion/row_type/date_row.rb, line 10
def on_change(text_field)
end
picker() click to toggle source
# File lib/formotion/row_type/date_row.rb, line 52
def picker
  @picker ||= begin
    picker = UIDatePicker.alloc.initWithFrame(CGRectZero)
    picker.datePickerMode = self.picker_mode
    picker.hidden = false
    picker.date = self.date_value || Time.now
    picker.countDownDuration = self.row.value if row.picker_mode == :countdown
    picker.minuteInterval = self.row.minute_interval if self.row.minute_interval

    picker.when(UIControlEventValueChanged) do
      if self.row.picker_mode == :countdown
        self.row.value = @picker.countDownDuration
      else
        self.row.value = Time.at(@picker.date).to_i
      end
      update
    end

    picker
  end
end
picker_mode() click to toggle source
# File lib/formotion/row_type/date_row.rb, line 74
def picker_mode
  case self.row.picker_mode
  when :time
    UIDatePickerModeTime
  when :date_time
    UIDatePickerModeDateAndTime
  when :countdown
    UIDatePickerModeCountDownTimer
  else
    UIDatePickerModeDate
  end
end
update() click to toggle source
# File lib/formotion/row_type/date_row.rb, line 13
def update
  self.row.text_field && self.row.text_field.text = self.formatted_value
end
update_text_field(new_value) click to toggle source

Used when row.value changes

# File lib/formotion/row_type/date_row.rb, line 128
def update_text_field(new_value)
  self.row.text_field.text = self.formatted_value
end