Module: ProMotion::ScreenNavigation

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

Instance Method Summary collapse

Instance Method Details

#app_delegateObject



46
47
48
# File 'lib/ProMotion/screen/screen_navigation.rb', line 46

def app_delegate
  UIApplication.sharedApplication.delegate
end

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



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/ProMotion/screen/screen_navigation.rb', line 50

def close_screen(args = {})
  args ||= {}
  args = { sender: args } unless args.is_a?(Hash)
  args[:animated] = true unless args.has_key?(:animated)

  if self.modal?
    close_modal_screen args

  elsif self.navigationController
    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_modal(screen, args = {}) ⇒ Object



42
43
44
# File 'lib/ProMotion/screen/screen_navigation.rb', line 42

def open_modal(screen, args = {})
  open screen, args.merge({ modal: true })
end

#open_root_screen(screen) ⇒ Object



38
39
40
# File 'lib/ProMotion/screen/screen_navigation.rb', line 38

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

def open_screen(screen, args = {})
  args = { in_detail: false, in_master: false, close_all: false, modal: false, in_tab: false, animated: true }.merge args

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

  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, args[:animated]

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

  elsif self.navigationController
    push_view_controller screen, self.navigationController, args[:animated].nil? ? true : args[:animated]

  else
    open_root_screen (screen.navigationController || screen)

  end

  screen
end

#push_view_controller(vc, nav_controller = nil, animated = true) ⇒ Object



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

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

#send_on_return(args = {}) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'lib/ProMotion/screen/screen_navigation.rb', line 69

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