系统提供的方案:UIViewController的类别UIContainerViewControllerCallbacks中定义了两个方法:
- (void)willMoveToParentViewController:(nullable UIViewController *)parent API_AVAILABLE(ios(5.0));
- (void)didMoveToParentViewController:(nullable UIViewController *)parent API_AVAILABLE(ios(5.0));
当push进来的时候两个方法都会调用,parent的值不为空,为当前的UINavigationController;当侧滑返回时,会先调用willMove,parent的值为空;当滑动结束返回了上个页面后,则会调用didMove,parent的值也为空;如果滑动结束没有返回,还在当前页面,那么则不会调用didMove方法;我们只需要在当前控制器中按需取用这两个方法就可以了。
下面是我写笔记时返回需要实时保存的需求,采用的方法:
/// 监听控制器滑动返回
- (void)willMoveToParentViewController:(UIViewController *)parent {
// parent参数,是父controller,当将孩子从其父母中删除时,参数是nil。
if (!parent) {
// 处理事件
}
}