Skip to content

Commit f886216

Browse files
committed
get rid of navigation/presentation hacks and deep levels of abstraction
1 parent dc50683 commit f886216

File tree

5 files changed

+20
-211
lines changed

5 files changed

+20
-211
lines changed

lib/motion/RMXEventManager.rb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,12 @@ def newCalendarChooser
214214
.take(1)
215215
.mapReplace(controller)
216216
.subscribeNext(->(c) {
217-
RMXViewControllerPresentation.dismiss({
218-
:view_controller => c,
219-
:animated => (opts[:animated] || false),
220-
:completion => nil
221-
})
217+
anim = (opts[:animated] || false)
218+
if c.presentingViewController
219+
c.dismissViewControllerAnimated(anim, completion:nil)
220+
elsif c.navigationController
221+
c.navigationController.popViewControllerAnimated(anim)
222+
end
222223
})
223224

224225
controller

lib/motion/RMXNavigationBar.rb

Lines changed: 0 additions & 52 deletions
This file was deleted.

lib/motion/RMXNavigationController.rb

Lines changed: 14 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -3,98 +3,32 @@ class RMXNavigationController < UINavigationController
33
include RMXCommonMethods
44
include RMXViewControllerPresentation
55

6-
attr_accessor :transitionSignal, :transitionSubject, :transitioning, :rootViewControllerOnLoad
7-
8-
def navigationController(navigationController, willShowViewController:view_controller, animated:animated)
9-
@transitioning = true
10-
navigationController.transitionSubject.sendNext(true)
11-
end
12-
13-
def navigationController(navigationController, didShowViewController:view_controller, animated:animated)
14-
@transitioning = false
15-
@queued_ops.each do |item|
16-
send(*item)
17-
end
18-
@queued_ops.clear
19-
navigationController.transitionSubject.sendNext(false)
20-
end
21-
22-
def pushViewController(view_controller, animated:animated)
23-
if !@transitioning
24-
super
25-
else
26-
@queued_ops << [ 'pushViewController:animated:', view_controller, false ]
27-
end
28-
nil
29-
end
30-
31-
def popViewControllerAnimated(animated)
32-
if !@transitioning
33-
super
34-
else
35-
@queued_ops << [ 'popViewControllerAnimated:', false ]
36-
end
37-
nil
38-
end
39-
40-
def popToRootViewControllerAnimated(animated)
41-
if !@transitioning
42-
super
43-
else
44-
@queued_ops << [ 'popToRootViewControllerAnimated:', false ]
45-
end
6+
def rmx_init
7+
RMX.log_dealloc(self)
8+
viewStateSignal
9+
self.delegate = self
4610
nil
4711
end
4812

49-
def popToViewController(view_controller, animated:animated)
50-
if !@transitioning
51-
if viewControllers.include?(view_controller)
52-
super
53-
end
54-
else
55-
@queued_ops << [ 'popToViewController:animated:', view_controller, false ]
56-
end
57-
nil
13+
def initWithNibName(name, bundle:bundle)
14+
s = super
15+
rmx_init
16+
s
5817
end
5918

60-
def setViewControllers(controllers, animated:animated)
61-
if !@transitioning
62-
super
63-
else
64-
@queued_ops << [ 'setViewControllers:animated:', controllers, false ]
65-
end
66-
nil
19+
def initWithCoder(decoder)
20+
s = super
21+
rmx_init
22+
s
6723
end
6824

6925
def didReceiveMemoryWarning
7026
p "didReceiveMemoryWarning"
7127
super
7228
end
7329

74-
def viewDidLoad
75-
RMX.log_dealloc(self)
76-
77-
@queued_ops = []
78-
@transitionSubject = RACReplaySubject.replaySubjectWithCapacity(1)
79-
@transitionSignal = @transitionSubject.subscribeOn(RACScheduler.mainThreadScheduler)
80-
81-
viewStateSignal
82-
83-
rac_signalForSelector('viewDidDisappear:').subscribeNext(->(tuple) { RMX.resignApplicationFirstResponder }.weak!)
84-
85-
self.delegate = self
86-
87-
pushViewController(rootViewControllerOnLoad, animated: false) if rootViewControllerOnLoad
88-
89-
self.rootViewControllerOnLoad = nil
90-
91-
end
92-
93-
def self.create(rootViewController, navBarHack=true)
94-
v = alloc.initWithNavigationBarClass(RMXNavigationBar, toolbarClass:nil)
95-
v.rootViewControllerOnLoad = rootViewController
96-
v.navigationBar.shouldOnlyReceiveTouchEventsInsideNavigationBar = navBarHack
97-
v
30+
def self.create(rootViewController)
31+
alloc.initWithRootViewController(rootViewController)
9832
end
9933

10034
end

lib/motion/RMXViewControllerPresentation.rb

Lines changed: 0 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -4,63 +4,6 @@ def self.included(klass)
44
klass.send(:include, InstanceMethods)
55
end
66

7-
module FactoryMethods
8-
9-
# presentViewController should always be called on the next runloop to avoid quirks.
10-
# this just wraps that behavior
11-
def present(opts)
12-
unless [ :origin, :view_controller, :animated, :completion ].all? { |x| opts.key?(x) }
13-
raise "Missing RMXViewControllerPresentation.present opts: #{opts.inspect}"
14-
end
15-
RACScheduler.mainThreadScheduler.schedule(-> {
16-
opts[:origin].presentViewController(opts[:view_controller], animated:opts[:animated], completion:opts[:completion])
17-
})
18-
end
19-
20-
# remove the controller from the display heirarchy, taking into account how it is
21-
# currently presented.
22-
def dismiss(opts)
23-
unless [ :view_controller, :animated, :completion ].all? { |x| opts.key?(x) }
24-
raise "Missing RMXViewControllerPresentation.dismiss opts: #{opts.inspect}"
25-
end
26-
animated = opts[:animated]
27-
block = opts[:completion]
28-
view_controller = opts[:view_controller]
29-
navigationController = view_controller.navigationController
30-
31-
32-
if view_controller.presentingViewController
33-
RACScheduler.mainThreadScheduler.schedule(-> {
34-
view_controller.dismissViewControllerAnimated(animated, completion:block)
35-
})
36-
elsif navigationController
37-
if index = navigationController.viewControllers.index(view_controller)
38-
before_index = index - 1
39-
before_index = 0 if index < 0
40-
pop_to_controller = navigationController.viewControllers[before_index]
41-
if pop_to_controller && pop_to_controller != navigationController.viewControllers.last
42-
# p "pop_to_controller", pop_to_controller
43-
# p "navigationController.popToViewController(pop_to_controller, animated:animated)"
44-
RACScheduler.mainThreadScheduler.schedule(-> {
45-
if block
46-
pop_to_controller.rac_signalForSelector('viewDidAppear:')
47-
.timeout(2, onScheduler:RACScheduler.mainThreadScheduler)
48-
.take(1)
49-
.subscribeNext(->(args) {
50-
block.call
51-
}, error:->(error) {
52-
})
53-
end
54-
navigationController.popToViewController(pop_to_controller, animated:animated)
55-
})
56-
end
57-
end
58-
end
59-
end
60-
61-
end
62-
extend FactoryMethods
63-
647
module InstanceMethods
658

669
def viewStateSignal
@@ -110,21 +53,5 @@ def disappearing(animated)
11053
def disappeared(animated)
11154
end
11255

113-
def present(vc, animated=false, &block)
114-
RMXViewControllerPresentation.present({
115-
:origin => self,
116-
:view_controller => vc,
117-
:animated => animated,
118-
:completion => block
119-
})
120-
end
121-
122-
def dismiss(animated=false, &block)
123-
RMXViewControllerPresentation.dismiss({
124-
:view_controller => self,
125-
:animated => animated,
126-
:completion => block
127-
})
128-
end
12956
end
13057
end

lib/rmx.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
RMXViewControllerPresentation
3232
RMXKeyboardHelpers
3333
UIResponder+RMX
34-
RMXNavigationBar
3534
RMXNavigationController
3635
RMXTableViewController
3736
RMXViewController

0 commit comments

Comments
 (0)