Module: ProMotion::Table::Searchable

Included in:
ProMotion::Table
Defined in:
lib/ProMotion/table/extensions/searchable.rb

Instance Method Summary collapse

Instance Method Details

#get_searchable_paramsObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/ProMotion/table/extensions/searchable.rb', line 43

def get_searchable_params
  params = self.class.get_searchable_params.dup

  # support camelCase params
  params[:search_results_updater] ||= params[:searchResultsUpdater]
  params[:hides_nav_bar] = params[:hidesNavigationBarDuringPresentation] if params[:hides_nav_bar].nil?
  params[:obscures_background] = params[:obscuresBackgroundDuringPresentation] if params[:obscures_background].nil?
  params[:hides_search_bar_when_scrolling] = params[:hidesSearchBarWhenScrolling] if params[:hides_search_bar_when_scrolling].nil?

  params[:delegate] ||= self
  params[:search_results_updater] ||= self
  params[:search_bar_delegate] ||= self
  params[:hides_nav_bar] = true if params[:hides_nav_bar].nil?
  params[:obscures_background] = false if params[:obscures_background].nil?
  params[:hides_search_bar_when_scrolling] = false if params[:hides_search_bar_when_scrolling].nil?

  params
end

#make_searchable(params = nil) ⇒ Object

params argument is deprecated. No longer need to use it.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ProMotion/table/extensions/searchable.rb', line 9

def make_searchable(params = nil) # params argument is deprecated. No longer need to use it.
  params = get_searchable_params

  self.definesPresentationContext = true
  search_controller.delegate = params[:delegate]
  search_controller.searchResultsUpdater = params[:search_results_updater]
  search_controller.hidesNavigationBarDuringPresentation = params[:hides_nav_bar]
  search_controller.dimsBackgroundDuringPresentation = params[:obscures_background] # iOS 8+ (not deprecated yet)
  # search_controller.obscuresBackgroundDuringPresentation = params[:obscures_background] # iOS 9.1+ recommends using this instead of dimsBackgroundDuringPresentation

  search_bar = search_controller.searchBar
  search_bar.delegate = params[:search_bar_delegate]
  search_bar.placeholder = NSLocalizedString(params[:placeholder], nil) if params[:placeholder]
  if params[:scopes]
    @scopes = params[:scopes]
    search_bar.scopeButtonTitles = @scopes
  end

  if navigationItem && navigationItem.respond_to?(:setSearchController)
    # For iOS 11 and later, we place the search bar in the navigation bar.
    navigationItem.searchController = search_controller
    navigationItem.hidesSearchBarWhenScrolling = params[:hides_search_bar_when_scrolling]
  else
    # For iOS 10 and earlier, we place the search bar in the table view's header.
    search_bar.autoresizingMask = UIViewAutoresizingFlexibleWidth
    tableView.tableHeaderView = search_bar
    if params[:hide_initially]
      tableView.contentOffset = CGPointMake(0, search_bar.frame.size.height)
    end
  end

  @search_controller = search_controller
end

#search_controllerObject



5
6
7
# File 'lib/ProMotion/table/extensions/searchable.rb', line 5

def search_controller
  @search_controller ||= UISearchController.alloc.initWithSearchResultsController(nil)
end

#searchBar(search_bar, selectedScopeButtonIndexDidChange: selected_scope_index) ⇒ Object



84
85
86
# File 'lib/ProMotion/table/extensions/searchable.rb', line 84

def searchBar(search_bar, selectedScopeButtonIndexDidChange: selected_scope_index)
  try :did_change_selected_scope, selected_scope_index
end

#updateSearchResultsForSearchController(search_controller) ⇒ Object

UISearchResultsUpdating protocol methods #########



74
75
76
77
78
79
80
81
82
# File 'lib/ProMotion/table/extensions/searchable.rb', line 74

def updateSearchResultsForSearchController(search_controller)
  search_text = search_controller.searchBar.text
  if search_text.empty?
    promotion_table_data.clear_filter
  else
    promotion_table_data.search(search_text)
  end
  table_view.reloadData
end

#willDismissSearchController(search_controller) ⇒ Object



68
69
70
# File 'lib/ProMotion/table/extensions/searchable.rb', line 68

def willDismissSearchController(search_controller)
  search_controller.delegate.will_end_search if search_controller.delegate.respond_to? "will_end_search"
end

#willPresentSearchController(search_controller) ⇒ Object

UISearchControllerDelegate methods #######



64
65
66
# File 'lib/ProMotion/table/extensions/searchable.rb', line 64

def willPresentSearchController(search_controller)
  search_controller.delegate.will_begin_search if search_controller.delegate.respond_to? "will_begin_search"
end