module ProMotion::Table

Attributes

promotion_table_data[R]

Protected Class Methods

included(base) click to toggle source
# File lib/ProMotion/table/table.rb, line 379
def self.included(base)
  base.extend(TableClassMethods)
end

Public Instance Methods

accessory_toggled_switch(switch) click to toggle source
# File lib/ProMotion/table/table.rb, line 111
def accessory_toggled_switch(switch)
  table_cell = closest_parent(UITableViewCell, switch)
  index_path = closest_parent(UITableView, table_cell).indexPathForCell(table_cell)

  if index_path
    data_cell = cell_at(index_path: index_path)
    data_cell[:accessory][:arguments][:value] = switch.isOn if data_cell[:accessory][:arguments].is_a?(Hash)
    trigger_action(data_cell[:accessory][:action], data_cell[:accessory][:arguments], index_path) if data_cell[:accessory][:action]
  end
end
cell_at(args = {}) click to toggle source

Returns the data cell

# File lib/ProMotion/table/table.rb, line 159
def cell_at(args = {})
  self.promotion_table_data.cell(args)
end
check_table_data() click to toggle source
# File lib/ProMotion/table/table.rb, line 26
def check_table_data
  mp("Missing #table_data method in TableScreen #{self.class.to_s}.", force_color: :red) unless self.respond_to?(:table_data)
end
deleteRowsAtIndexPaths(index_paths, withRowAnimation: animation) click to toggle source
# File lib/ProMotion/table/table.rb, line 278
def deleteRowsAtIndexPaths(index_paths, withRowAnimation: animation)
  mp "ProMotion expects you to use 'delete_cell(index_paths, animation)'' instead of 'deleteRowsAtIndexPaths(index_paths, withRowAnimation:animation)'.", force_color: :yellow
  delete_row(index_paths, animation)
end
delete_row(index_paths, animation = nil) click to toggle source
# File lib/ProMotion/table/table.rb, line 122
def delete_row(index_paths, animation = nil)
  deletable_index_paths = []
  index_paths = [index_paths] if index_paths.kind_of?(NSIndexPath)
  index_paths.each do |index_path|
    delete_cell = false

    delete_cell = trigger_action(:on_cell_deleted, cell_at(index_path: index_path), index_path) if respond_to?(:on_cell_deleted)
    unless delete_cell == false
      self.promotion_table_data.delete_cell(index_path: index_path)
      deletable_index_paths << index_path
    end
  end
  table_view.deleteRowsAtIndexPaths(deletable_index_paths, withRowAnimation: map_row_animation_symbol(animation)) if deletable_index_paths.length > 0
end
edit_mode(args = {}) click to toggle source
# File lib/ProMotion/table/table.rb, line 147
def edit_mode(args = {})
  args[:enabled] = false if args[:enabled].nil?
  args[:animated] = true if args[:animated].nil?

  setEditing(args[:enabled], animated:args[:animated])
end
edit_mode?() click to toggle source
# File lib/ProMotion/table/table.rb, line 154
def edit_mode?
  !!isEditing
end
numberOfSectionsInTableView(_) click to toggle source

Cocoa touch methods #################

# File lib/ProMotion/table/table.rb, line 164
def numberOfSectionsInTableView(_)
  self.promotion_table_data.sections.length
end
screen_setup() click to toggle source
# File lib/ProMotion/table/table.rb, line 17
def screen_setup
  check_table_data
  set_up_header_footer_views
  set_up_searchable
  set_up_refreshable
  set_up_longpressable
  set_up_row_height
end
search_string() click to toggle source
# File lib/ProMotion/table/table.rb, line 94
def search_string
  self.promotion_table_data.search_string
end
searching?() click to toggle source
# File lib/ProMotion/table/table.rb, line 90
def searching?
  self.promotion_table_data.filtered?
end
sectionIndexTitlesForTableView(_) click to toggle source

Set table_data_index if you want the right hand index column (jumplist)

# File lib/ProMotion/table/table.rb, line 184
def sectionIndexTitlesForTableView(_)
  return if searching?
  return self.table_data_index if self.respond_to?(:table_data_index)
  nil
end
set_up_longpressable() click to toggle source
# File lib/ProMotion/table/table.rb, line 77
def set_up_longpressable
  if self.class.respond_to?(:get_longpressable) && self.class.get_longpressable
    self.make_longpressable(self.class.get_longpressable_params)
  end
end
set_up_refreshable() click to toggle source
# File lib/ProMotion/table/table.rb, line 67
def set_up_refreshable
  if self.class.respond_to?(:get_refreshable) && self.class.get_refreshable
    if defined?(UIRefreshControl)
      self.make_refreshable(self.class.get_refreshable_params)
    else
      mp "To use the refresh control on < iOS 6, you need to include the CocoaPod 'CKRefreshControl'.", force_color: :yellow
    end
  end
end
set_up_row_height() click to toggle source
# File lib/ProMotion/table/table.rb, line 83
def set_up_row_height
  if self.class.respond_to?(:get_row_height) && params = self.class.get_row_height
    self.view.rowHeight = params[:height]
    self.view.estimatedRowHeight = params[:estimated]
  end
end
set_up_searchable() click to toggle source
# File lib/ProMotion/table/table.rb, line 47
def set_up_searchable
  if self.class.respond_to?(:get_searchable) && self.class.get_searchable
    self.make_searchable(self.class.get_searchable_params)
  end
end
setup_search_method() click to toggle source
# File lib/ProMotion/table/table.rb, line 53
def setup_search_method
  params = self.class.get_searchable_params
  if params.nil?
    return nil
  else
    @search_method || begin
      params = self.class.get_searchable_params
      @search_action = params[:with] || params[:find_by] || params[:search_by] || params[:filter_by]
      @search_action = method(@search_action) if @search_action.is_a?(Symbol) || @search_action.is_a?(String)
      @search_action
    end
  end
end
tableView(_, numberOfRowsInSection: section) click to toggle source

Number of cells

# File lib/ProMotion/table/table.rb, line 169
def tableView(_, numberOfRowsInSection: section)
  self.promotion_table_data.section_length(section)
end
table_view() click to toggle source
# File lib/ProMotion/table/table.rb, line 13
def table_view
  self.view
end
toggle_edit_mode(animated = true) click to toggle source
# File lib/ProMotion/table/table.rb, line 143
def toggle_edit_mode(animated = true)
  edit_mode({enabled: !editing?, animated: animated})
end
update_table_data(args = {}) click to toggle source
# File lib/ProMotion/table/table.rb, line 137
def update_table_data(args = {})
  args = { index_paths: args } unless args.is_a?(Hash)

  self.update_table_view_data(self.table_data, args)
end
update_table_view_data(data, args = {}) click to toggle source
# File lib/ProMotion/table/table.rb, line 98
def update_table_view_data(data, args = {})
  self.promotion_table_data.data = data
  if args[:index_paths]
    args[:animation] ||= UITableViewRowAnimationNone

    table_view.beginUpdates
    table_view.reloadRowsAtIndexPaths(Array(args[:index_paths]), withRowAnimation: args[:animation])
    table_view.endUpdates
  else
    table_view.reloadData
  end
end

Protected Instance Methods

map_cell_editing_style(symbol) click to toggle source
# File lib/ProMotion/table/table.rb, line 357
def map_cell_editing_style(symbol)
  {
    none:   UITableViewCellEditingStyleNone,
    delete: UITableViewCellEditingStyleDelete,
    insert: UITableViewCellEditingStyleInsert
  }[symbol] || symbol || UITableViewCellEditingStyleNone
end
map_row_animation_symbol(symbol) click to toggle source
# File lib/ProMotion/table/table.rb, line 365
def map_row_animation_symbol(symbol)
  symbol ||= UITableViewRowAnimationAutomatic
  {
    fade:       UITableViewRowAnimationFade,
    right:      UITableViewRowAnimationRight,
    left:       UITableViewRowAnimationLeft,
    top:        UITableViewRowAnimationTop,
    bottom:     UITableViewRowAnimationBottom,
    none:       UITableViewRowAnimationNone,
    middle:     UITableViewRowAnimationMiddle,
    automatic:  UITableViewRowAnimationAutomatic
  }[symbol] || symbol || UITableViewRowAnimationAutomatic
end