Module: ProMotion::Tabs

Included in:
DelegateModule, ScreenModule
Defined in:
lib/ProMotion/tabs/tabs.rb

Defined Under Namespace

Modules: TabClassMethods

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#tab_barObject

Returns the value of attribute tab_bar.



3
4
5
# File 'lib/ProMotion/tabs/tabs.rb', line 3

def tab_bar
  @tab_bar
end

#tab_bar_itemObject

Returns the value of attribute tab_bar_item.



3
4
5
# File 'lib/ProMotion/tabs/tabs.rb', line 3

def tab_bar_item
  @tab_bar_item
end

Class Method Details

.included(base) ⇒ Object



112
113
114
# File 'lib/ProMotion/tabs/tabs.rb', line 112

def self.included(base)
  base.extend(TabClassMethods)
end

Instance Method Details

#create_tab_bar_item(tab = {}) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/ProMotion/tabs/tabs.rb', line 50

def create_tab_bar_item(tab={})
  if tab[:system_icon] || tab[:icon]
    PM.logger.deprecated("`system_icon:` no longer supported. Use `system_item:` instead.") if tab[:system_icon]
    PM.logger.deprecated("`icon:` no longer supported. Use `item:` instead.") if tab[:icon]
    tab[:system_item] ||= tab[:system_icon]
    tab[:item] ||= tab[:icon]
  end

  unless tab[:system_item] || tab[:item]
    PM.logger.warn("You must provide either a `system_item:` or custom `item:` in `tab_bar_item`")
    abort
  end

  title = tab[:title] || "Untitled"

  tab_bar_item = UITabBarItem.alloc.initWithTabBarSystemItem(map_tab_symbol(tab[:system_item]), tag: current_tag) if tab[:system_item]
  tab_bar_item = create_tab_bar_item_custom(title, tab[:item], current_tag) if tab[:item]

  tab_bar_item.badgeValue = tab[:badge_number].to_s unless tab[:badge_number].nil? || tab[:badge_number] <= 0

  tab_bar_item
end

#create_tab_bar_item_custom(title, item_image, tag) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/ProMotion/tabs/tabs.rb', line 32

def create_tab_bar_item_custom(title, item_image, tag)
  if item_image.is_a?(String)
    item_image = UIImage.imageNamed(item_image)
  elsif item_image.is_a?(Hash)
    item_selected = item_image[:selected]
    item_unselected = item_image[:unselected]
    item_image = nil
  end

  item = UITabBarItem.alloc.initWithTitle(title, image: item_image, tag: tag)

  if item_selected || item_unselected
    item.setFinishedSelectedImage(item_selected, withFinishedUnselectedImage: item_unselected)
  end

  item
end

#current_tagObject



73
74
75
76
# File 'lib/ProMotion/tabs/tabs.rb', line 73

def current_tag
  return @prev_tag = 0 unless @prev_tag
  @prev_tag += 1
end

#map_tab_symbol(symbol) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/ProMotion/tabs/tabs.rb', line 84

def map_tab_symbol(symbol)
  @_tab_symbols ||= {
    more:         UITabBarSystemItemMore,
    favorites:    UITabBarSystemItemFavorites,
    featured:     UITabBarSystemItemFeatured,
    top_rated:    UITabBarSystemItemTopRated,
    recents:      UITabBarSystemItemRecents,
    contacts:     UITabBarSystemItemContacts,
    history:      UITabBarSystemItemHistory,
    bookmarks:    UITabBarSystemItemBookmarks,
    search:       UITabBarSystemItemSearch,
    downloads:    UITabBarSystemItemDownloads,
    most_recent:  UITabBarSystemItemMostRecent,
    most_viewed:  UITabBarSystemItemMostViewed
  }
  @_tab_symbols[symbol] || symbol
end

#open_tab(tab) ⇒ Object



14
15
16
# File 'lib/ProMotion/tabs/tabs.rb', line 14

def open_tab(tab)
  self.tab_bar.open_tab(tab)
end

#open_tab_bar(*screens) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/ProMotion/tabs/tabs.rb', line 5

def open_tab_bar(*screens)
  self.tab_bar = PM::TabBarController.new(screens)

  delegate = self.respond_to?(:open_root_screen) ? self : UIApplication.sharedApplication.delegate

  delegate.open_root_screen(self.tab_bar)
  self.tab_bar
end

#refresh_tab_bar_itemObject



23
24
25
# File 'lib/ProMotion/tabs/tabs.rb', line 23

def refresh_tab_bar_item
  self.tabBarItem = create_tab_bar_item(self.tab_bar_item) if self.tab_bar_item && self.respond_to?("tabBarItem=")
end

#replace_current_item(tab_bar_controller, view_controller: vc) ⇒ Object



78
79
80
81
82
# File 'lib/ProMotion/tabs/tabs.rb', line 78

def replace_current_item(tab_bar_controller, view_controller: vc)
  controllers = NSMutableArray.arrayWithArray(tab_bar_controller.viewControllers)
  controllers.replaceObjectAtIndex(tab_bar_controller.selectedIndex, withObject: vc)
  tab_bar_controller.viewControllers = controllers
end

#set_tab_bar_badge(number) ⇒ Object



27
28
29
30
# File 'lib/ProMotion/tabs/tabs.rb', line 27

def set_tab_bar_badge(number)
  self.tab_bar_item[:badge_number] = number
  refresh_tab_bar_item
end

#set_tab_bar_item(args = {}) ⇒ Object



18
19
20
21
# File 'lib/ProMotion/tabs/tabs.rb', line 18

def set_tab_bar_item(args = {})
  self.tab_bar_item = args
  refresh_tab_bar_item
end