class Formotion::RowType::SliderRow

Constants

SLIDER_VIEW_TAG

Public Instance Methods

build_cell(cell) click to toggle source
# File lib/formotion/row_type/slider_row.rb, line 10
def build_cell(cell)
  cell.selectionStyle = self.row.selection_style || UITableViewCellSelectionStyleNone
  slideView = UISlider.alloc.initWithFrame(CGRectZero)
  cell.accessoryView = cell.editingAccessoryView = slideView
  row.range ||= (1..10)
  slideView.minimumValue = row.range.first
  slideView.maximumValue = row.range.last
  slideView.tag = SLIDER_VIEW_TAG
  slideView.setValue(row.value, animated:true) if row.value
  slideView.accessibilityLabel = (row.title || "") + " Slider"
  slideView.userInteractionEnabled = row.editable?

  slideView.when(UIControlEventValueChanged) do
    break_with_semaphore do
      row.value = slideView.value
    end
  end
  observe(self.row, "value") do |old_value, new_value|
    break_with_semaphore do
      slideView.setValue(row.value, animated:false)
    end
  end


  cell.swizzle(:layoutSubviews) do
    def layoutSubviews
      old_layoutSubviews

      # viewWithTag is terrible, but I think it's ok to use here...
      formotion_field = self.viewWithTag(SLIDER_VIEW_TAG)
      formotion_field.sizeToFit

      field_frame = formotion_field.frame
      field_frame.origin.y = 10
      field_frame.origin.x = self.textLabel.frame.origin.x + self.textLabel.frame.size.width + Formotion::RowType::Base.field_buffer
      field_frame.size.width  = self.frame.size.width - field_frame.origin.x - Formotion::RowType::Base.field_buffer
      field_frame.size.height = self.frame.size.height - Formotion::RowType::Base.field_buffer
      formotion_field.frame = field_frame
    end
  end
  nil
end
layoutSubviews() click to toggle source
# File lib/formotion/row_type/slider_row.rb, line 35
def layoutSubviews
  old_layoutSubviews

  # viewWithTag is terrible, but I think it's ok to use here...
  formotion_field = self.viewWithTag(SLIDER_VIEW_TAG)
  formotion_field.sizeToFit

  field_frame = formotion_field.frame
  field_frame.origin.y = 10
  field_frame.origin.x = self.textLabel.frame.origin.x + self.textLabel.frame.size.width + Formotion::RowType::Base.field_buffer
  field_frame.size.width  = self.frame.size.width - field_frame.origin.x - Formotion::RowType::Base.field_buffer
  field_frame.size.height = self.frame.size.height - Formotion::RowType::Base.field_buffer
  formotion_field.frame = field_frame
end