很早就想写这篇文章了,由于一直很忙,就没空来写,今天晚上在看别人的博客的时间突然想起自己还有两篇文章还没有完成,原来想写很多内容,但是后面感觉还是没有必要,因为SDK讲的很清楚了,如果我在这里讲太多也没有什么意思,所以就简单写一下吧。
我们在iOS设备那小小的屏幕上完成无数复杂的用户交互,就必然会涉及非常多的页面切换,下面我们就一起来讨论一下在IOS开发中如何进行页面的切换,我这里讲的视图切换讲的仅仅是在一个视图框架下视图控制器间的切换,不包括使用tab,pageController,等其它的视图间变换的方法,当然我也不是高手,我只是写出我的认识,希望能够大家一起讨论。
(转载请保留此文字:本文来源:[iphone开发私房菜_4_] iphone开发中的导航,页面切换全面指南http://blog.youkuaiyun.com/ipromiseu/article/details/6224643] write by Gray.Luo guohui.great@gmail.com)
1.UINavigationController
这是第一种,我们一般称之为导航控制器,这也是使用最频繁的一种方式,因为tableView的子视频一般使用这个方法进行切换。它实现一个什么功能,我就没有必要讲了吧,你既然在看这篇文章,必须也是一个开发者,UINavigationController的原理,我也不讲的,总的意思就是使用堆栈管理每个入栈的UIViewController。我们还是看具体怎么做吧。
(1)第一步:
当然是创建一个UINavigationController了,一般我创建的同时,会顺便添加一个根视图进去,如果没有视图添加进去,自然,UINavigationController也就没有什么意义了。
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:aControl];
(2)第二步:
当然是把这个nav加到我们的窗口中去,我们在上面第一步把aController封装成了nav了,就是入栈第一个视图,就是根视图,任何子视图都有此“开枝散页”,现在可以直接把nav当成一个视图控制器。nav.view就是这个可视的视图aControl本身了。
[window addSubView:nav.view];
相关设置说明:
UINavigationController 本身会自动进行入线,出栈的相关操作,进入到新的视图的同时,UINavigationController 会自动添加左边返回按钮用以返回了一个视图,当然你可以在新的视图中,将这个左边的按钮修改成其它用途。比如,你可以通过设置self.navigationItem.leftBarButtonItem为某个ButtonItem,当用户点击左边按钮时,进行的一些清理操作等。
我们一般在使用过程中会碰到的设置内容有:
self.navigationItem.leftBarButtonItem
self.navigationItem.rightBarButtonItem
self.navigationItem.backBarButtonItem
self.navigationItem.titleView等等,反正属性也挺多的,这里就不一一列举了,可以直接参考SDK文档,都有非常详细的说明。
backBarButtonItem和leftBarButtonItem是不能同时使用的,一山岂能容二虎呢?
(3)第三步:入栈操作:
UIViewController *aViewController = [[UIView alloc] init;
[self.navigationController pushViewController:aViewController animated:NO];
(4)第四步:出栈操作:
把当前视图pop出去,当然根视图可不行哟。
[self.navigationController popViewControllerAnimated:YES];
2.ModalViewController
我们称其为静态模组,在少量页面的切换中,一般用于选取数据时使用,比如音乐播放列表的页面和当前正在播放的音乐两个页面的切换,使用ModalViewController进行各种动画切换就非常的方便。
(1)切换到新的视图
[self presentModalViewController:aNewController animated:YES];
[aNewController release];
(2)隐藏这个新视图,返回原来的视图
一般在切换到新视图的时候,会将上一个视图控制器的地址传入到新的视频控制器,这样,在新的视频控制器就可以调用上一个视频控制器的内容。
当原来的视图调用dismissModalViewControllerAnimated:YES的时候,则刚才推入的视频将会隐藏。
[self.myParentViewController dismissModalViewControllerAnimated:YES];
使用静态模组的方法特别需要注意内存的处理。