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 + + +