uinavigationcontroller - 在 iOS7 中从 UINavigationController 滑动弹出时查看 Controller 生命周期

标签 uinavigationcontroller uigesturerecognizer ios7 lifecycle

iOS 7 新的 swipe-to-pop 手势对 UINavigationController 的 View Controller 生命周期有何影响? ?

最佳答案

iOS 7 中的新功能是 UINavigationController 中的滑动弹出手势;您可以从左到右滑动手指来执行通常使用后退按钮完成的操作。您需要注意的是,pop 过渡是可取消的。

点击后退按钮仍然可以按您期望的方式工作:

  • 用户点击返回按钮
  • viewWillDisappear被称为
  • viewDidDisappear被称为
  • 弹出的 Controller 已发布

  • 完成滑动弹出就像点击后退按钮
  • 用户开始从左向右滑动
  • viewWillDisappear被称为
  • 用户完成滑动手势
  • viewDidDisappear被称为
  • 弹出的 Controller 已发布

  • 取消的滑动弹出就像这样
  • 用户开始从左向右滑动
  • viewWillDisappear被称为
  • 用户中止滑动手势(通过反转它,或者向右拖动不够远)
  • viewWillAppear被称为
  • viewDidAppear被称为

  • 相应地更新您的期望和 View 生命周期方法。

    值得注意的是 viewWillDisappear在所有情况下都会调用,即使用户中止弹出手势。这可能被证明是谎言;如果滑动弹出手势被中止,您的 View 不会消失,是吗?

    像我们所有人一样,我努力平衡addObserver/removeObserver在我的应用程序中调用以防止崩溃。我重写了 View Controller 生命周期方法 viewWillAppear/viewWillDisappear做家务,维护一个setupPerformed标志以防止在 View Controller 的生命周期内多次添加观察者。此外,我依靠this trick确定 View Controller 是否即将从导航 Controller 的堆栈中弹出并随后释放,以便我可以知道何时准确地拆除我的观察者。

    iOS 7 复杂化了这种模式。当 viewWillDisappear 时,我不能再依赖 View Controller 被拆除。叫做。我不得不期待它可能会转身,大喊“开个玩笑”,然后继续调用viewWillAppear/viewDidAppear。重新来过。

    关于uinavigationcontroller - 在 iOS7 中从 UINavigationController 滑动弹出时查看 Controller 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18927878/

    相关文章:

    iOS设计问题: How should switching between days be implemented in a table view?

    iOS - 如何使对象一次只能拖动到一个方向

    ios - 将 UITapGestureRecognizer 添加到 XIB

    iphone - 我应该使用 UIButton 还是简单的 UITapGestureRecognizer

    ios - iPhone 6/6+ 的 UINavigationBar 自定义图像

    swift - UIImagePickerController 未正确关闭

    ios - 当 ViewController 不在窗口层次结构中时不显示警报

    ios - 从后台杀死应用程序后 UILocalnotification 不工作

    ios - 为什么弹出 UIViewController 会改变 navigationItem 的 titleTextAttributes?

    ios - 字符 0 周围的值无效,NSJSONSerialization