ViewController生命周期 及 interactivePopGestureRecognizer 那些事

ViewController生命周期

alloc -> initWithNibName -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidDisappear -> dealloc

注意viewWillUnload和viewDidUnload已经在ios6被废弃了,因为Clearing references to views is no longer necessary。

注意1.没有viewWillLoad。

注意2.viewDidLoad和viewDidUnload并不是成对的。

某些情况下的方法调用流程:

  • pushViewController 和  presentViewController  方法实现的 A视图控制器 到 B视图控制器的过渡,会按顺序触发 (A)viewWillDisappear->(B)viewWillAppear->(A)viewDidDisappear->(B)viewDidAppear
  • 右滑返回手势、 popViewController 和 dismissViewControllerAnimated 方法实现的 B视图控制器 到 A视图控制器的过渡则会按顺序触发 (B)viewWillDisappear->(A)viewWillAppear->(B)viewDidDisappear->(A)viewDidAppear

右滑退出事件统计:

右滑触发viewWillDisappear后有可能是退出,也有可能不退出;而点击返回退出和右滑退出都会触发viewDidDisappear,这里需要用到转场协调器(

UIViewControllerTransitionCoordinator

- (void)viewWillDisappear:(BOOL)animated{

[super viewWillDisappear:animated];

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])

{

id<UIViewControllerTransitionCoordinator> tc = self.navigationController.topViewController.transitionCoordinator;

[tc notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {

// 交互式过渡操作结束调用的代码块,右滑结束(不管是否pop成功),如果不成功会在这个代码块结束后调用viewWillAppear

_interactivePopExit = YES;    // 全局变量,YES表示右滑成功退出,NO表示失败

}];

}

}

- (void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

_interactivePopExit = NO;  // 右滑退出操作未能pop

}

- (void)viewDidDisappear:(BOOL)animated{

[super viewDidDisappear:animated];

if (_interactivePopExit) {

NSLog(@"边缘右滑退出");

}

}

时间: 2024-10-17 08:32:41

ViewController生命周期 及 interactivePopGestureRecognizer 那些事的相关文章

iOS学习笔记—ViewController/生命周期

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController).导航控制器(UINavigationController).标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等. 按结构可以对iOS的所有ViewCo

IOS ViewController生命周期

ViewController ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内部各个view的加载显示和卸载,同时负责与其他ViewController的通信和协调. 在IOS中,有两类ViewController,一类是显示内容的,比如UIViewController.UITableViewController等,同时还可以自定义继承自UIViewController的Vi

ios基础 ViewController 生命周期

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController).导航控制器(UINavigationController).标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等. 按结构可以对iOS的所有ViewCo

【Xamarin 开发 IOS --IOS ViewController生命周期】

ViewController ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内部各个view的加载显示和卸载,同时负责与其他ViewController的通信和协调. 在IOS中,有两类ViewController,一类是显示内容的,比如UIViewController.UITableViewController等,同时还可以自定义继承自UIViewController的Vi

iOS学习笔记-ViewController/生命周期

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController).导航控制器(UINavigationController).标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等. 按结构可以对iOS的所有ViewCo

IOS学习笔记——ViewController生命周期详解

在我之前的学习笔记中讨论过ViewController,过了这么久,对它也有了新的认识和体会,ViewController是我们在开发过程中碰到最多的朋友,今天就来好好认识一下它.ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内部各个view的加载显示和卸载,同时负责与其他ViewController的通信和协调.在IOS中,有两类ViewController,一类是显示内容

ViewController生命周期简单归纳

一.调用顺序: 1. + (id)alloc 分配内存: 2. - (id)init 方法(包括其他-(id)init...方法),只允许调用一次,并且要与 alloc方法 写在一起,在init方法中申请的内存,要在dealloc方法中释放(或者其他地方): 3. - (void)awakeFromNib 使用Xib初始化后会调用此方法,一般不会重写此方法: 4. - (void)loadView 如果使用Xib创建ViewController,就不要重写该方法.一般不会修改此方法: 5. -

IOS学习笔记37——ViewController生命周期详解

在我之前的学习笔记中讨论过ViewController,过了这么久,对它也有了新的认识和体会,ViewController是我们在开发过程中碰到最多的朋友,今天就来好好认识一下它.ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内部各个view的加载显示和卸载,同时负责与其他ViewController的通信和协调.在IOS中,有两类ViewController,一类是显示内容

viewcontroller生命周期知识要点

一 viewcontroller执行方法的主要顺序为: init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewDidUnload—>dealloc 二  关于init方法,一般是- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundl