class Formotion::RowType::TextRow
Constants
- TEXT_VIEW_TAG
Attributes
field[RW]
Public Instance Methods
build_cell(cell)
click to toggle source
# File lib/formotion/row_type/text_row.rb, line 12 def build_cell(cell) cell.selectionStyle = self.row.selection_style || UITableViewCellSelectionStyleBlue @field = UITextView.alloc.initWithFrame(CGRectZero) field.backgroundColor = UIColor.clearColor field.editable = true field.tag = TEXT_VIEW_TAG field.text = row.value field.returnKeyType = row.return_key || UIReturnKeyDefault field.autocapitalizationType = row.auto_capitalization if row.auto_capitalization field.autocorrectionType = row.auto_correction if row.auto_correction field.inputAccessoryView = input_accessory_view(row.input_accessory) if row.input_accessory # must be set prior to placeholder! field.font = BW::Font.new(row.font) if row.font field.placeholder = row.placeholder field.enabled = row.editable? field.on_begin do |text_field| row.on_begin_callback && row.on_begin_callback.call @tap_gesture.enabled = true end field.should_begin? do |text_field| row.section.form.active_row = row true end observe(self.row, "value") do |old_value, new_value| break_with_semaphore do field.text = row.value end end field.on_change do |text_field| break_with_semaphore do row.value = text_field.text end end field.on_end do |text_field| @tap_gesture.enabled = false end @tap_gesture = UITapGestureRecognizer.alloc.initWithTarget self, action:'dismissKeyboard' @tap_gesture.enabled = false cell.addGestureRecognizer @tap_gesture cell.swizzle(:layoutSubviews) do def layoutSubviews old_layoutSubviews # viewWithTag is terrible, but I think it's ok to use here... formotion_field = self.viewWithTag(TEXT_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 cell.addSubview(field) field end
dismissKeyboard()
click to toggle source
# File lib/formotion/row_type/text_row.rb, line 89 def dismissKeyboard field.resignFirstResponder end
done_editing()
click to toggle source
# File lib/formotion/row_type/text_row.rb, line 93 def done_editing dismissKeyboard self.row.done_action.call unless self.row.done_action.nil? end
layoutSubviews()
click to toggle source
# File lib/formotion/row_type/text_row.rb, line 62 def layoutSubviews old_layoutSubviews # viewWithTag is terrible, but I think it's ok to use here... formotion_field = self.viewWithTag(TEXT_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
on_select(tableView, tableViewDelegate)
click to toggle source
# File lib/formotion/row_type/text_row.rb, line 82 def on_select(tableView, tableViewDelegate) if !row.editable? return end field.becomeFirstResponder end