lib/ProMotion/screen_helpers/screen_navigation.rb in ProMotion-0.7.5 vs lib/ProMotion/screen_helpers/screen_navigation.rb in ProMotion-0.7.6
- old
+ new
@@ -1,16 +1,16 @@
module ProMotion
module ScreenNavigation
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 = setup_screen_for_open(screen, args)
+ screen = set_up_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
@@ -18,11 +18,11 @@
elsif args[:close_all]
open_root_screen screen
elsif args[:modal]
- present_modal_view_controller screen, animated
+ 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.navigation_controller
@@ -49,11 +49,11 @@
end
def close_screen(args = {})
args ||= {}
args = { sender: args } unless args.is_a?(Hash)
- args[:animated] ||= true
+ args[:animated] = true unless args.has_key?(:animated)
if self.modal?
close_modal_screen args
elsif self.navigation_controller
@@ -67,11 +67,11 @@
end
alias :close :close_screen
def send_on_return(args = {})
if self.parent_screen && self.parent_screen.respond_to?(:on_return)
- if args
+ 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
@@ -86,24 +86,27 @@
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=)
+ vc.navigation_controller = nav_controller if vc.respond_to?(:navigation_controller=)
nav_controller.pushViewController(vc, animated: true)
end
protected
- def setup_screen_for_open(screen, args={})
+ def set_up_screen_for_open(screen, args={})
# Instantiate screen if given a class
screen = screen.new if screen.respond_to?(:new)
+
+ # Set parent
+ screen.parent_screen = self if screen.respond_to?(:parent_screen=)
- # Set parent, title & modal properties
- screen.parent_screen = self if screen.respond_to?("parent_screen=")
- screen.title = args[:title] if args[:title] && screen.respond_to?("title=")
- screen.modal = args[:modal] if args[:modal] && screen.respond_to?("modal=")
+ # Set title & modal properties
+ screen.title = args[:title] if args[:title] && screen.respond_to?(:title=)
+ screen.modal = args[:modal] if args[:modal] && screen.respond_to?(:modal=)
# Hide bottom bar?
screen.hidesBottomBarWhenPushed = args[:hide_tab_bar] == true
# Wrap in a PM::NavigationController?
@@ -113,11 +116,11 @@
screen
end
def ensure_wrapper_controller_in_place(screen, args={})
- unless args[:close_all] || args[:modal]
+ unless args[:close_all] || args[:modal] || args[:in_detail] || args[:in_master]
screen.navigation_controller ||= self.navigation_controller if screen.respond_to?("navigation_controller=")
screen.tab_bar ||= self.tab_bar if screen.respond_to?("tab_bar=")
end
end
@@ -142,23 +145,26 @@
PM.logger.error "No tab bar item '#{tab_name}'"
end
end
def close_modal_screen(args={})
- args[:animated] ||= true
+ args[:animated] = true unless args.has_key?(:animated)
self.parent_screen.dismissViewControllerAnimated(args[:animated], completion: lambda {
send_on_return(args)
})
end
def close_nav_screen(args={})
- args[:animated] ||= true
+ args[:animated] = true unless args.has_key?(:animated)
if args[:to_screen] && args[:to_screen].is_a?(UIViewController)
self.parent_screen = args[:to_screen]
self.navigation_controller.popToViewController(args[:to_screen], animated: args[:animated])
else
self.navigation_controller.popViewControllerAnimated(args[:animated])
end
end
end
end
+
+
+