Module: ProMotion::ScreenNavigation
- Includes:
- Support
- Included in:
- ScreenModule
- Defined in:
- lib/ProMotion/screen/screen_navigation.rb
Instance Method Summary
collapse
Methods included from Support
#app, #app_delegate, #app_window, #try
Instance Method Details
#close_screen(args = {}) ⇒ Object
Also known as:
close
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/ProMotion/screen/screen_navigation.rb', line 37
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_nav_screen args if self.navigationController
close_modal_screen args
elsif self.navigationController
close_nav_screen args
send_on_return(args)
else
mp "Tried to close #{self.to_s}; however, this screen isn't modal or in a nav bar.", force_color: :yellow
end
end
|
#open_in_split_screen(screen, args) ⇒ Object
23
24
25
26
27
|
# File 'lib/ProMotion/screen/screen_navigation.rb', line 23
def open_in_split_screen(screen, args)
self.split_screen.detail_screen = screen if args[:in_detail]
self.split_screen.master_screen = screen if args[:in_master]
args[:in_detail] || args[:in_master]
end
|
#open_modal(screen, args = {}) ⇒ Object
33
34
35
|
# File 'lib/ProMotion/screen/screen_navigation.rb', line 33
def open_modal(screen, args = {})
open screen, args.merge({ modal: true })
end
|
#open_root_screen(screen, args = {}) ⇒ Object
29
30
31
|
# File 'lib/ProMotion/screen/screen_navigation.rb', line 29
def open_root_screen(screen, args = {})
app_delegate.open_root_screen(screen, args)
end
|
#open_screen(screen, args = {}) ⇒ Object
Also known as:
open
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/ProMotion/screen/screen_navigation.rb', line 5
def open_screen(screen, args = {})
args = { animated: true }.merge(args)
screen = set_up_screen_for_open(screen, args)
ensure_wrapper_controller_in_place(screen, args)
opened ||= open_in_split_screen(screen, args) if self.split_screen
opened ||= open_root_screen(screen, args) if args[:close_all]
opened ||= replace_nav_stack([screen], args) if args[:replace_nav_stack]
opened ||= present_modal_view_controller(screen, args) if args[:modal]
opened ||= open_in_tab(screen, args[:in_tab]) if args[:in_tab]
opened ||= push_view_controller(screen, self.navigationController, !!args[:animated]) if self.navigationController
opened ||= open_root_screen(screen.navigationController || screen, args)
screen
end
|
#push_view_controller(vc, nav_controller = nil, animated = true) ⇒ Object
69
70
71
72
73
74
75
76
77
|
# File 'lib/ProMotion/screen/screen_navigation.rb', line 69
def push_view_controller(vc, nav_controller=nil, animated=true)
unless self.navigationController
mp "You need a nav_bar if you are going to push #{vc.to_s} onto it.", force_color: :red
end
nav_controller ||= self.navigationController
return if nav_controller.topViewController == vc
vc.first_screen = false if vc.respond_to?(:first_screen=)
nav_controller.pushViewController(vc, animated: animated)
end
|
#replace_nav_stack(screens, args = {}) ⇒ Object
79
80
81
82
|
# File 'lib/ProMotion/screen/screen_navigation.rb', line 79
def replace_nav_stack(screens, args = {})
args[:animated] ||= true
navigationController.setViewControllers(screens, animated: !!args[:animated])
end
|
#send_on_return(args = {}) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/ProMotion/screen/screen_navigation.rb', line 56
def send_on_return(args = {})
return unless self.parent_screen
if 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
elsif self.parent_screen.private_methods.include?(:on_return)
mp "#{self.parent_screen.inspect} has an `on_return` method, but it is private and not callable from the closing screen.", force_color: :yellow
end
end
|