您的位置:首页 > 其它

pushViewController 与 presentViewController 与 TabBarController 之间切换VC

2015-09-15 01:06 543 查看

pushViewController 与 presentViewController 与 TabBarController 之间切换VC

缘由

pushViewController、presentViewController以及TabBarController这3中方法、他们都可以用来切换ViewController。由于在写代码的时候,产生了一些疑惑,切换之前和切换之后的ViewController他们的生命周期是怎么样呢?于是,抱着这样的疑问去敲了一些代码实践一下,增加理解和记忆!代码可以从github中下载。

实践





从代码的输出日志可以看出来:

pushViewController

[vc1 pushViewController: vc11  ]




vc11 返回 vc1




presentViewController

[vc2 presentViewController: vc22]




[vc22 dismiss] 返回vc2




TabbarController

从vc1切换到vc2




从vc2切换到vc1




总结:

1.当使用pushViewController或者presentViewController来切换视图控制器的时,vc的生命周期如下:(vc1代表,之前的vc,vc11代表之后的vc)

调用push或者present方法时,vc的生命周期方法调用顺序如下:

vc1:viewWillDisapper --->vc11:viewWillAppear --->vc1:viewDidDisappear --->vc11:viewDisAppear


点击返回或者调用dismiss方法,vc的生命周期方法调用顺序如下:

vc11:viewWillDisappear --->vc1:viewWillAppear --->vc11:viewDidDisappear --->vc1:viewDidAppear


点击TabBarController的tab来切换vc,vc的生命周期方法调用顺序如下:

vc2:viewWillAppear --->vc1:viewWillDisappear --->vc1:viewDidDisappear --->vc2:viewDidAppear


有上述可见,使用push或者present弹出、返回(撤销)视图,两者视图控制器的生命周期方法调用顺序都是一样的!而tabbar切换视图,视图控制器的生命周期方法调用顺序却和push或present不同!

区别主要体现在是:

1.push和present的方式:主动!先调用自身的viewWillDisappear


2.tabbar切换的方式:被动!目标vc先调用viewWillAppear之后,自身才去调用viewWillDisappear!


3.viewDidLoad方法,在调用push或者present方法的时候都会触发该方法,而在tabor之间切换vc是不会触发该方法的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objetive-c