Commit 68308add by Daniel Dahan

pr-938: Fixing lifecycle function calls for base TransitionController

parent ea78e694
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'Material' s.name = 'Material'
s.version = '2.12.6' s.version = '2.12.7'
s.license = 'BSD-3-Clause' s.license = 'BSD-3-Clause'
s.summary = 'A UI/UX framework for creating beautiful applications.' s.summary = 'A UI/UX framework for creating beautiful applications.'
s.homepage = 'http://materialswift.com' s.homepage = 'http://materialswift.com'
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>2.12.6</string> <string>2.12.7</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
......
...@@ -173,7 +173,6 @@ open class TabBar: Bar { ...@@ -173,7 +173,6 @@ open class TabBar: Bar {
willSet { willSet {
selectedTabItem?.isSelected = false selectedTabItem?.isSelected = false
} }
didSet { didSet {
selectedTabItem?.isSelected = true selectedTabItem?.isSelected = true
} }
......
...@@ -117,7 +117,7 @@ open class TabsController: TransitionController { ...@@ -117,7 +117,7 @@ open class TabsController: TransitionController {
didSet { didSet {
selectedIndex = 0 selectedIndex = 0
prepareRootViewController() prepareSelectedIndexViewController()
prepareTabBar() prepareTabBar()
layoutSubviews() layoutSubviews()
} }
...@@ -157,7 +157,7 @@ open class TabsController: TransitionController { ...@@ -157,7 +157,7 @@ open class TabsController: TransitionController {
self.viewControllers = [] self.viewControllers = []
super.init(rootViewController: rootViewController) super.init(rootViewController: rootViewController)
} }
open override func viewWillLayoutSubviews() { open override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews() super.viewWillLayoutSubviews()
layoutSubviews() layoutSubviews()
...@@ -175,7 +175,7 @@ open class TabsController: TransitionController { ...@@ -175,7 +175,7 @@ open class TabsController: TransitionController {
view.backgroundColor = .white view.backgroundColor = .white
view.contentScaleFactor = Screen.scale view.contentScaleFactor = Screen.scale
prepareViewControllers() prepareSelectedIndexViewController()
prepareTabBar() prepareTabBar()
prepareTabItems() prepareTabItems()
} }
...@@ -216,6 +216,8 @@ fileprivate extension TabsController { ...@@ -216,6 +216,8 @@ fileprivate extension TabsController {
default:break default:break
} }
prepare(viewController: tvc, in: container)
if isTriggeredByUserInteraction { if isTriggeredByUserInteraction {
delegate?.tabsController?(tabsController: self, willSelect: viewController) delegate?.tabsController?(tabsController: self, willSelect: viewController)
} }
...@@ -233,9 +235,7 @@ fileprivate extension TabsController { ...@@ -233,9 +235,7 @@ fileprivate extension TabsController {
s.rootViewController = tvc s.rootViewController = tvc
s.view.isUserInteractionEnabled = true s.view.isUserInteractionEnabled = true
s.removeViewController(viewController: fvc)
completion?(isFinished) completion?(isFinished)
if isTriggeredByUserInteraction { if isTriggeredByUserInteraction {
...@@ -245,33 +245,10 @@ fileprivate extension TabsController { ...@@ -245,33 +245,10 @@ fileprivate extension TabsController {
} }
} }
internal extension TabsController {
override func prepareRootViewController() {
rootViewController = viewControllers[selectedIndex]
}
}
fileprivate extension TabsController { fileprivate extension TabsController {
/// Prepares all the view controllers. /// Prepares the view controller at the selectedIndex.
func prepareViewControllers() { func prepareSelectedIndexViewController() {
prepareViewController(at: selectedIndex) rootViewController = viewControllers[selectedIndex]
prepareRootViewController()
}
/**
Loads a view controller based on its index in the viewControllers Array
and adds it as a child view controller.
- Parameter at index: An Int for the viewControllers index.
*/
func prepareViewController(at index: Int) {
let v = viewControllers[index]
guard !childViewControllers.contains(v) else {
return
}
prepare(viewController: v, in: container)
} }
/// Prepares the TabBar. /// Prepares the TabBar.
...@@ -338,18 +315,6 @@ fileprivate extension TabsController { ...@@ -338,18 +315,6 @@ fileprivate extension TabsController {
} }
} }
fileprivate extension TabsController {
/**
Removes a given view controller from the childViewControllers array.
- Parameter at index: An Int for the view controller position.
*/
func removeViewController(viewController: UIViewController) {
viewController.willMove(toParentViewController: nil)
viewController.view.removeFromSuperview()
viewController.removeFromParentViewController()
}
}
extension TabsController { extension TabsController {
/** /**
Transitions to the view controller that is at the given index. Transitions to the view controller that is at the given index.
......
...@@ -56,7 +56,16 @@ open class TransitionController: UIViewController { ...@@ -56,7 +56,16 @@ open class TransitionController: UIViewController {
is recommended to use the transitionFromRootViewController is recommended to use the transitionFromRootViewController
helper method. helper method.
*/ */
open internal(set) var rootViewController: UIViewController! open internal(set) var rootViewController: UIViewController! {
willSet {
if let v = rootViewController {
removeViewController(viewController: v)
}
}
didSet {
prepare(viewController: rootViewController, in: container)
}
}
/// The transition type used during a transition. /// The transition type used during a transition.
open var motionTransitionType = MotionTransitionType.fade open var motionTransitionType = MotionTransitionType.fade
...@@ -87,6 +96,10 @@ open class TransitionController: UIViewController { ...@@ -87,6 +96,10 @@ open class TransitionController: UIViewController {
self.rootViewController = rootViewController self.rootViewController = rootViewController
} }
open override var shouldAutomaticallyForwardAppearanceMethods: Bool {
return false
}
open override func viewDidLoad() { open override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
prepare() prepare()
...@@ -148,7 +161,6 @@ open class TransitionController: UIViewController { ...@@ -148,7 +161,6 @@ open class TransitionController: UIViewController {
view.contentScaleFactor = Screen.scale view.contentScaleFactor = Screen.scale
prepareContainer() prepareContainer()
prepareRootViewController()
} }
} }
...@@ -162,12 +174,6 @@ internal extension TransitionController { ...@@ -162,12 +174,6 @@ internal extension TransitionController {
view.addSubview(container) view.addSubview(container)
} }
/// A method that prepares the rootViewController.
@objc
func prepareRootViewController() {
prepare(viewController: rootViewController, in: container)
}
/** /**
A method that adds the passed in controller as a child of A method that adds the passed in controller as a child of
the BarController within the passed in the BarController within the passed in
...@@ -181,6 +187,10 @@ internal extension TransitionController { ...@@ -181,6 +187,10 @@ internal extension TransitionController {
return return
} }
guard !childViewControllers.contains(v) else {
return
}
addChildViewController(v) addChildViewController(v)
container.addSubview(v.view) container.addSubview(v.view)
v.didMove(toParentViewController: self) v.didMove(toParentViewController: self)
...@@ -190,3 +200,15 @@ internal extension TransitionController { ...@@ -190,3 +200,15 @@ internal extension TransitionController {
v.view.contentScaleFactor = Screen.scale v.view.contentScaleFactor = Screen.scale
} }
} }
internal extension TransitionController {
/**
Removes a given view controller from the childViewControllers array.
- Parameter at index: An Int for the view controller position.
*/
func removeViewController(viewController: UIViewController) {
viewController.willMove(toParentViewController: nil)
viewController.view.removeFromSuperview()
viewController.removeFromParentViewController()
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment