diff --git a/README.md b/README.md index 2c6b273..55b3e56 100644 --- a/README.md +++ b/README.md @@ -411,7 +411,7 @@ class SettingsScreen < ProMotion::GroupedTableScreen title "Settings" def on_load - add_right_nav_button(label: "Save", action: :save) + set_nav_bar_right_button("Save", action: :save) set_tab_bar_item(title: "Settings", icon: "settings.png") end @@ -749,7 +749,7 @@ end updated_time_format: "%l:%M %p" )
All parameters are optional. If you do not specify a a callback, it will assume you've implemented an on_refresh method in your tableview.
All parameters are optional. If you do not specify a a callback, it will assume you've implemented an on_refresh method in your tableview.
def on_refresh
# Code to start the refresh
end
diff --git a/lib/ProMotion/cocoatouch/SplitViewController.rb b/lib/ProMotion/cocoatouch/SplitViewController.rb
index ad955c4..b1612d4 100644
--- a/lib/ProMotion/cocoatouch/SplitViewController.rb
+++ b/lib/ProMotion/cocoatouch/SplitViewController.rb
@@ -8,16 +8,14 @@ class SplitViewController < UISplitViewController
s.respond_to?(:visibleViewController) ? s.visibleViewController : s
end
def master_screen=(s)
- self.viewControllers = [s.main_controller, self.viewControllers.last]
+ self.viewControllers = [s.pm_main_controller, self.viewControllers.last]
end
def detail_screen=(s)
# set the button from the old detail screen to the new one
button = detail_screen.navigationItem.leftBarButtonItem
s.navigationItem.leftBarButtonItem = button
-
- vc = s.respond_to?(:main_controller) ? s.main_controller : s
- self.viewControllers = [self.viewControllers.first, vc]
+ self.viewControllers = [self.viewControllers.first, s.pm_main_controller]
end
def screens=(s_array)
self.viewControllers = s_array
diff --git a/lib/ProMotion/delegate.rb b/lib/ProMotion/delegate.rb
index 8a59494..172f338 100644
--- a/lib/ProMotion/delegate.rb
+++ b/lib/ProMotion/delegate.rb
@@ -28,7 +28,7 @@ module ProMotion
end
def load_root_screen(new_screen)
- new_screen = new_screen.main_controller if new_screen.respond_to?(:main_controller)
+ new_screen = new_screen.pm_main_controller
self.window ||= self.ui_window.alloc.initWithFrame(UIScreen.mainScreen.bounds)
self.window.rootViewController = new_screen
diff --git a/lib/ProMotion/screen_helpers/screen_navigation.rb b/lib/ProMotion/screen_helpers/screen_navigation.rb
index cd50e22..480b8e3 100644
--- a/lib/ProMotion/screen_helpers/screen_navigation.rb
+++ b/lib/ProMotion/screen_helpers/screen_navigation.rb
@@ -29,7 +29,7 @@ module ProMotion
push_view_controller screen
else
- open_root_screen screen
+ open_root_screen screen.pm_main_controller
end
@@ -117,9 +117,7 @@ module ProMotion
end
def present_modal_view_controller(screen, animated)
- vc = screen
- vc = screen.main_controller if screen.respond_to?(:main_controller)
- self.presentModalViewController(vc, animated:animated)
+ self.presentModalViewController(screen.pm_main_controller, animated:animated)
end
def present_view_controller_in_tab_bar_controller(screen, tab_name)
diff --git a/lib/ProMotion/screen_helpers/screen_tabs.rb b/lib/ProMotion/screen_helpers/screen_tabs.rb
index f933d7d..f95ccee 100644
--- a/lib/ProMotion/screen_helpers/screen_tabs.rb
+++ b/lib/ProMotion/screen_helpers/screen_tabs.rb
@@ -16,8 +16,7 @@ module ProMotion
s.parent_screen = self if self.is_a?(UIViewController) && s.respond_to?("parent_screen=")
s.tab_bar = tab_bar_controller if s.respond_to?("tab_bar=")
- vc = s.respond_to?(:main_controller) ? s.main_controller : s
- view_controllers << vc
+ view_controllers << s.pm_main_controller
tag_index += 1
diff --git a/lib/ProMotion/screens/_screen_module.rb b/lib/ProMotion/screens/_screen_module.rb
index e3cca4e..266d302 100644
--- a/lib/ProMotion/screens/_screen_module.rb
+++ b/lib/ProMotion/screens/_screen_module.rb
@@ -140,10 +140,6 @@ module ProMotion
end
def on_disappear; end
- def main_controller
- self.navigation_controller || self
- end
-
def view_controller
warn "[DEPRECATION] `view_controller` is deprecated, as screens are now UIViewController subclasses."
self
diff --git a/lib/ProMotion/screens/behaves_like_screen.rb b/lib/ProMotion/screens/behaves_like_screen.rb
new file mode 100644
index 0000000..eaf1f17
--- /dev/null
+++ b/lib/ProMotion/screens/behaves_like_screen.rb
@@ -0,0 +1,10 @@
+module ProMotion
+ module BehavesLikeScreen
+ def pm_main_controller
+ navigationController || self
+ end
+ alias_method :main_controller, :pm_main_controller
+ end
+end
+
+UIViewController.send :include, ProMotion::BehavesLikeScreen
diff --git a/lib/ProMotion/version.rb b/lib/ProMotion/version.rb
index 67fa637..0b28205 100644
--- a/lib/ProMotion/version.rb
+++ b/lib/ProMotion/version.rb
@@ -1,3 +1,3 @@
module ProMotion
- VERSION = "0.6.2" unless defined?(ProMotion::VERSION)
+ VERSION = "0.6.3" unless defined?(ProMotion::VERSION)
end
diff --git a/spec/screen_spec.rb b/spec/screen_spec.rb
index 0326d14..6c42e33 100644
--- a/spec/screen_spec.rb
+++ b/spec/screen_spec.rb
@@ -97,6 +97,21 @@ describe "screen properties" do
end
+ describe "pm_main_controller" do
+
+ it "should return the navigation controller wrapper" do
+ @screen.pm_main_controller.should.be.instance_of ProMotion::NavigationController
+ end
+
+ it "should return itself when screen is a plain UIViewController" do
+ vc = UIViewController.alloc.initWithNibName(nil, bundle: nil)
+ vc.respond_to?(:pm_main_controller).should == true
+ vc.pm_main_controller.should == vc
+ end
+
+ end
+
+
describe "navigation controller behavior" do
it "should have a nav bar" do
diff --git a/spec/split_screen_in_tab_bar_spec.rb b/spec/split_screen_in_tab_bar_spec.rb
index 03718e2..28bc4c4 100644
--- a/spec/split_screen_in_tab_bar_spec.rb
+++ b/spec/split_screen_in_tab_bar_spec.rb
@@ -38,12 +38,12 @@ describe "split screen in tab bar functionality" do
it "should set the first viewController to HomeScreen's main controller" do
@split_screen.master_screen.should == @master_screen
- @split_screen.viewControllers.first.should == @master_screen.main_controller
+ @split_screen.viewControllers.first.should == @master_screen.pm_main_controller
end
it "should set the second viewController to BasicScreen's main controller" do
@split_screen.detail_screen.should == @detail_screen
- @split_screen.viewControllers.last.should == @detail_screen.main_controller
+ @split_screen.viewControllers.last.should == @detail_screen.pm_main_controller
end
it "should set the tab bar first viewController to the split screen" do
diff --git a/spec/split_screen_open_screen_spec.rb b/spec/split_screen_open_screen_spec.rb
index 10bbdb5..97e375e 100644
--- a/spec/split_screen_open_screen_spec.rb
+++ b/spec/split_screen_open_screen_spec.rb
@@ -17,15 +17,15 @@ describe "split screen `open` functionality" do
it "should open a new screen in the detail view" do
@master_screen.open @detail_screen_2, in_detail: true
@split_screen.detail_screen.should == @detail_screen_2
- @split_screen.viewControllers.first.should == @master_screen.main_controller
- @split_screen.viewControllers.last.should == @detail_screen_2.main_controller
+ @split_screen.viewControllers.first.should == @master_screen.pm_main_controller
+ @split_screen.viewControllers.last.should == @detail_screen_2.pm_main_controller
end
it "should open a new screen in the master view" do
@detail_screen_1.open @detail_screen_2, in_master: true
@split_screen.master_screen.should == @detail_screen_2
- @split_screen.viewControllers.first.should == @detail_screen_2.main_controller
- @split_screen.viewControllers.last.should == @detail_screen_1.main_controller
+ @split_screen.viewControllers.first.should == @detail_screen_2.pm_main_controller
+ @split_screen.viewControllers.last.should == @detail_screen_1.pm_main_controller
end
it "should open a new screen in the master view's navigation controller" do
@@ -37,7 +37,7 @@ describe "split screen `open` functionality" do
it "should open a new modal screen in the detail view" do
@detail_screen_1.open @detail_screen_2, modal: true
@split_screen.detail_screen.should == @detail_screen_1
- @detail_screen_1.presentedViewController.should == @detail_screen_2.main_controller
+ @detail_screen_1.presentedViewController.should == @detail_screen_2.pm_main_controller
end
it "should not interfere with normal non-split screen navigation" do
diff --git a/spec/split_screen_spec.rb b/spec/split_screen_spec.rb
index 83de801..0ed00d9 100644
--- a/spec/split_screen_spec.rb
+++ b/spec/split_screen_spec.rb
@@ -28,12 +28,12 @@ describe "split screen functionality" do
it "should set the first viewController to MasterScreen" do
@split_screen.master_screen.should == @master_screen
- @split_screen.viewControllers.first.should == @master_screen.main_controller
+ @split_screen.viewControllers.first.should == @master_screen.pm_main_controller
end
it "should set the second viewController to DetailScreen" do
@split_screen.detail_screen.should == @detail_screen
- @split_screen.viewControllers.last.should == @detail_screen.main_controller
+ @split_screen.viewControllers.last.should == @detail_screen.pm_main_controller
end
it "should set the title on both screens" do