iOS 7新的刷卡到手势的姿势对UINavigationController
的视图控制器生命周期有什么影响?
答案 0 :(得分:43)
iOS 7中的新功能是UINavigationController
中的滑动到手势。您可以从左向右滑动手指以执行通常使用后退按钮完成的操作。您必须注意的是,弹出过渡是可取消。
viewWillDisappear
被称为viewDidDisappear
被称为viewWillDisappear
被称为viewDidDisappear
被称为viewWillDisappear
被称为viewWillAppear
被称为viewDidAppear
被称为相应地更新您的期望和视图生命周期方法。
值得注意的是,即使用户中止弹出手势,也会在所有案例中调用viewWillDisappear
。这可能证明是谎言;如果刷卡到弹出的手势被中止,你的视图就不会消失,是吗?
与我们所有人一样,我努力平衡我的应用中的addObserver/removeObserver
次来电,以防止崩溃。我重写视图控制器生命周期方法viewWillAppear/viewWillDisappear
来执行内务处理,并维护一个setupPerformed
标志,以防止在视图控制器的生命周期内多次添加观察者。此外,我依靠this trick来确定视图控制器是否即将从导航控制器的堆栈中弹出并随后被释放,这样我就可以知道何时准确地拆除我的观察者。
iOS 7使这种模式变得复杂。调用viewWillDisappear
时,我无法再依赖视图控制器被拆除。我不得不期待它会转过身来,大喊“开玩笑”,然后再一次打电话给viewWillAppear/viewDidAppear
。
答案 1 :(得分:6)
很棒的帖子!
正如你所说,你不能再像你所描述的那样使用viewWillDisappear
和'技巧',但是对于我来说,这对我来说非常适合捕获后退按钮。< / p>
- (void)viewDidDisappear:(BOOL)animated
{
if (self.isMovingFromParentViewController == YES) {
// Do the tidy up as before....
}
}
希望这有助于某人。
答案 2 :(得分:0)
我的情况略有不同。我在自定义navigationController类中覆盖popViewControllerAnimated。在popViewControllerAnimated中,我能够在
时通过拖动检测到弹出self.interactivePopGestureRecognizer.state == UIGestureRecognizerStatePossible