What is the impact of iOS 7's new swipe-to-pop gesture on the view controller lifecycle of UINavigationController
?
You can do it by selecting the View Controller in Storyboard editor and clicking Editor -> Embed In -> Navigation Controller. Also make sure that you have your Storyboard Entry Point (the arrow that indicates which view controller is presented first) either pointing to Navigation Controller or before it.
You add and remove view controllers from the stack using segues or using the methods of this class. The user can also remove the topmost view controller using the back button in the navigation bar or using a left-edge swipe gesture.
New in iOS 7 is a swipe-to-pop gesture in UINavigationController
; you can swipe your finger from left-to-right to do what is normally done with the back button. The thing you have to watch for, is that the pop transition is cancellable.
viewWillDisappear
is calledviewDidDisappear
is calledviewWillDisappear
is calledviewDidDisappear
is calledviewWillDisappear
is calledviewWillAppear
is calledviewDidAppear
is calledUpdate your expectations, and your view lifecycle methods accordingly.
Of note is the fact that viewWillDisappear
is called in all cases, even if the user aborts the pop gesture. This may prove be a lie; if the swipe-to-pop gesture is aborted, your view isn't going to disappear, is it?
Like all of us, I strive to balance addObserver/removeObserver
calls in my app to prevent crashes. I override the view controller lifecycle methods viewWillAppear/viewWillDisappear
to do the housekeeping, and maintain a setupPerformed
flag to prevent observers from being added more than once during a view controller's lifetime. Moreover, I have relied on this trick to determine whether a view controller is about to be popped off a navigation controller's stack and subsequently released, so that I can know when precisely to tear down my observers.
iOS 7 has complicated this pattern. I can no longer rely on a view controller being torn down when viewWillDisappear
is called. I have to expect that it might turn around, yell "just kidding," and proceed to call viewWillAppear/viewDidAppear
all over again.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With