视图控制器的过渡不会有二义性,一个视图不会同时过渡到�另外两个视图,这样程序也会懵逼了,你他喵到底要我转到哪个视图...
1、两个最原始的ViewController之间的过渡:
选中Button按住Control拖拽到ViewController2,弹出选项框
分别选择Show过渡和Present Modally过渡在模拟器上运行,可以发现两者的过渡没有多少区别。
2、将父视图(即第一个视图)内嵌于一个导航控制器中
选中视图,顶部菜单Editor->Embed In->Navigation Controller
于是父视图前面就多了一个Navigation Controller:
现在我们选择父视图和子视图的过渡方式为Show,Build&Run:
可以发现,子视图中多了一个返回到父视图的按钮,还有值得注意的是,子视图继承了父视图的“部分导航栏”,为什么说是“部分”呢,下面紧接着说。
由于父视图内嵌于导航控制器,因此还能在导航栏中央设置标题,如下图所示"View1"
这是因为父视图有一个"Navigation Item"(导航栏)的东西
而我们发现子视图却没有,所以它不能设置标题,但可以说它有部分导航栏,体现在应用运行时,我们进入到子视图时有一个返回按钮,它是导航栏的一部分。
可以尝试手动给子视图加入Navigation Item,并设置标题为"View2":
再次Build&Run:
完美
将过渡方式改为Present Modally之后:
子视图打回原形,既没有返回按钮,也没有导航栏。
如果此时企图在子视图中像刚才那样手动添加"Navigation Item",也于事无补:
可以发现虽然在子视图内含有"Navigation Item",但没有体现在视图中,即使就这么运行,情况也和上面一样,子视图不会显示导航栏。
此时应该将子视图内嵌于一个导航控制器,完成后如下图:
现在子视图也有一个名副其实的Navigation Item了,给其设置一个酷炫的标题之后运行。因为父视图没什么变化,就不贴图占位置了,直接看子视图:
在Present Modally(模态视图)的过渡方式中,子视图不会自动生成返回按钮,需要手动添加,并编写一个返回按钮的点击事件:
-(IBAction)backClick: (id)sender {
[ self dismissViewControllerAnimated: TRUE completion: nil ] ; //关闭模态视图
}
假如这种情况下,我们再把Present Modally过渡方式改为Show,运行应用程序,发现与上面的结果完全一样。
所以如果想省心点要自动生成返回按钮,那子视图就不要内嵌于导航控制器,并且采用Show过渡方式。