视图控制器常用过渡Show和Present Modally

视图控制器的过渡不会有二义性,一个视图不会同时过渡到�另外两个视图,这样程序也会懵逼了,你他喵到底要我转到哪个视图...

1、两个最原始的ViewController之间的过渡:


1.1-两个ViewController的过渡

选中Button按住Control拖拽到ViewController2,弹出选项框

1.2-两个ViewController的过渡

1.3-两个ViewController的过渡

分别选择Show过渡和Present Modally过渡在模拟器上运行,可以发现两者的过渡没有多少区别。

1.4-两个ViewController的过渡

1.5-两个ViewController的过渡


2、将父视图(即第一个视图)内嵌于一个导航控制器中

选中视图,顶部菜单Editor->Embed In->Navigation Controller

2.1-带有导航控制器的ViewController过渡

于是父视图前面就多了一个Navigation Controller:

2.2-带有导航控制器的ViewController过渡

现在我们选择父视图和子视图的过渡方式为Show,Build&Run:

2.3-带有导航控制器的ViewController过渡

可以发现,子视图中多了一个返回到父视图的按钮,还有值得注意的是,子视图继承了父视图的“部分导航栏”,为什么说是“部分”呢,下面紧接着说。

由于父视图内嵌于导航控制器,因此还能在导航栏中央设置标题,如下图所示"View1"

2.4-带有导航控制器的ViewController过渡

这是因为父视图有一个"Navigation Item"(导航栏)的东西

2.5-带有导航控制器的ViewController过渡

而我们发现子视图却没有,所以它不能设置标题,但可以说它有部分导航栏,体现在应用运行时,我们进入到子视图时有一个返回按钮,它是导航栏的一部分。

2.6-带有导航控制器的ViewController过渡

可以尝试手动给子视图加入Navigation Item,并设置标题为"View2":

2.7-带有导航控制器的ViewController过渡
2.8-带有导航控制器的ViewController过渡

再次Build&Run:

2.9-带有导航控制器的ViewController过渡
2.10-带有导航控制器的ViewController过渡

完美

将过渡方式改为Present Modally之后:

2.11-带有导航控制器的ViewController过渡

子视图打回原形,既没有返回按钮,也没有导航栏。

2.12-带有导航控制器的ViewController过渡

如果此时企图在子视图中像刚才那样手动添加"Navigation Item",也于事无补:

可以发现虽然在子视图内含有"Navigation Item",但没有体现在视图中,即使就这么运行,情况也和上面一样,子视图不会显示导航栏。

2.13-带有导航控制器的ViewController过渡

此时应该将子视图内嵌于一个导航控制器,完成后如下图:

2.14-带有导航控制器的ViewController过渡

现在子视图也有一个名副其实的Navigation Item了,给其设置一个酷炫的标题之后运行。因为父视图没什么变化,就不贴图占位置了,直接看子视图:

2.15-带有导航控制器的ViewController过渡

在Present Modally(模态视图)的过渡方式中,子视图不会自动生成返回按钮,需要手动添加,并编写一个返回按钮的点击事件:

-(IBAction)backClick: (id)sender {

      [ self dismissViewControllerAnimated: TRUE completion: nil ] ;  //关闭模态视图

假如这种情况下,我们再把Present Modally过渡方式改为Show,运行应用程序,发现与上面的结果完全一样。

所以如果想省心点要自动生成返回按钮,那子视图就不要内嵌于导航控制器,并且采用Show过渡方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容