Module: ProMotion::ScreenNavigation

Included in:
ScreenModule
Defined in:
lib/ProMotion/screen_helpers/screen_navigation.rb

Instance Method Summary collapse

Instance Method Details

#app_delegateObject



43
44
45
# File 'lib/ProMotion/screen_helpers/screen_navigation.rb', line 43

def app_delegate
  UIApplication.sharedApplication.delegate
end

#close_screen(args = {}) ⇒ Object Also known as: close



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/ProMotion/screen_helpers/screen_navigation.rb', line 47

def close_screen(args = {})
  args ||= {}
  args[:animated] ||= true

  if self.is_modal?
    close_modal_screen args

  elsif self.navigation_controller
    close_nav_screen args
    send_on_return(args) # TODO: this would be better implemented in a callback or view_did_disappear.

  else
    PM.logger.warn "Tried to close #{self.to_s}; however, this screen isn't modal or in a nav bar."

  end
end

#open_root_screen(screen) ⇒ Object



39
40
41
# File 'lib/ProMotion/screen_helpers/screen_navigation.rb', line 39

def open_root_screen(screen)
  app_delegate.open_root_screen(screen)
end

#open_screen(screen, args = {}) ⇒ Object Also known as: open



4
5
6
7
8
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
# File 'lib/ProMotion/screen_helpers/screen_navigation.rb', line 4

def open_screen(screen, args = {})

  # Apply properties to instance
  screen = setup_screen_for_open(screen, args)
  ensure_wrapper_controller_in_place(screen, args)

  screen.send(:on_load) if screen.respond_to?(:on_load)
  animated = args[:animated] || true

  if args[:in_detail] && self.split_screen
    self.split_screen.detail_screen = screen

  elsif args[:in_master] && self.split_screen
    self.split_screen.master_screen = screen 

  elsif args[:close_all]
    open_root_screen screen

  elsif args[:modal]
    present_modal_view_controller screen, animated

  elsif args[:in_tab] && self.tab_bar
    present_view_controller_in_tab_bar_controller screen, args[:in_tab]

  elsif self.navigation_controller
    push_view_controller screen

  else
    open_root_screen screen.pm_main_controller

  end

end

#open_view_controller(screen) ⇒ Object



75
76
77
78
# File 'lib/ProMotion/screen_helpers/screen_navigation.rb', line 75

def open_view_controller(screen)
  PM.logger.deprecated "Use `open_root_screen` instead of the more ambiguous `open_view_controller`."
  open_root_screen screen
end

#push_view_controller(vc, nav_controller = nil) ⇒ Object



80
81
82
83
84
85
86
87
# File 'lib/ProMotion/screen_helpers/screen_navigation.rb', line 80

def push_view_controller(vc, nav_controller=nil)
  unless self.navigation_controller
    PM.logger.error "You need a nav_bar if you are going to push #{vc.to_s} onto it."
  end
  nav_controller ||= self.navigation_controller
  vc.first_screen = false if vc.respond_to?(:first_screen=)
  nav_controller.pushViewController(vc, animated: true)
end

#send_on_return(args = {}) ⇒ Object



65
66
67
68
69
70
71
72
73
# File 'lib/ProMotion/screen_helpers/screen_navigation.rb', line 65

def send_on_return(args = {})
  if self.parent_screen && self.parent_screen.respond_to?(:on_return)
    if args
      self.parent_screen.send(:on_return, args)
    else
      self.parent_screen.send(:on_return)
    end
  end
end