视图切换
视图切换
在多视图程序中,怎么从一个视图切换到另一个视图呢?
UIViewController只负责管理一屏的内容.
为每一屏的内容生成你自己的UIViewController子类.
使用已有的合成视图控制器将他们连在一起.
哈.说到这其实很清楚了.
你不需要再去琢磨怎么从一个视图切换到另一个视图了.
API已经为我们做好了准备.
合理利用UINavigationController类和UITabBarController类吧.
他们对应两浏览和tab 两种内容管理模式.当然,你可以混合使用.
addSubView虽然可以切换视图,但我并不建议…我感觉addsubview的正确使用方法应该仅限于父视图管理自己的子视图.
涉及到几大主界面的切换还是用UINavigationController类和UITabBarController
临时的视图切换使用presentModalViewController
常用视图切换:
1.addSubView 针对为视图
2. presentModalViewController/dismissModalViewControllerAnimated
对象为视图控制器,由任意视图控制器调用
3. pushViewController
对象为视图控制器,由导航控制器调用
addSubView和presentModalViewController的区别.
AddSubView
在ios4.x中
持有view的视图控制器不能接收到viewDidAppear/ViewWillAppear消息
在ios5.x中
持有view的视图控制器都能接收到viewDidAppear/ViewWillAppear消息
问题是:我遇到一个情况,用presentModalViewController能显示出视图.
但用AddSubView不能显示视图,在ios5.x中同样不能.为什么这样,还要研究.
显示视图过程中:
1.loadView
2.viewWillApear
3.viewDidAppear
UIViewController类或其子类会在初始化时创建一个UIView对象,会作为控制器的默认视图显示出来,可以通过self.view寻址访问。但没有调用loadView方法时,self.view=nil。默认loadView方法(即[super loadView])的作用是产生一个空白的view。
关于:
presentModalViewController
viewcontroller是使用[self.view addSubView:viewController.view]出现的.
1.放到viewController中的viewDidLoad中不会显示
2. 放到viewController中viewDidAppear中取消不了..会反复出现
3.在其它主动调用.都ok.
另一种viewController使用[navigationcontroller pushviewcontroller:viewcontroller]出现.
1.viewDidLoad;会显示,并且能正常取消
2.viewDidAppear:会显示,不能正常取消
3.在其它地方主动调用:会显示,能正常取消
阅读twitter分享代码总结:
1.初始化Engin实例
2.判断是否登陆.如果已经登陆,直接调用分享控件.
如果没有登陆,显示登陆控件.
其中有两个协议:
SA_OAuthTwitterEngineDelegate:用于管理用户授权,实际由engin来调用.
SA_OAuthTwitterControllerDelegate:用于登陆成功/失败处理,实际由SA_OAuthTwitterController来调用.
附一个我犯过小错误
[code]
demoViewController *dvc = [[demoViewController alloc]initWithFrame:CGRectMake(0,0,360,480)];
[self.view addSubView:dvc.view];//没有正确显示
[dvc viewDidAppear:NO];//说明,ios4.x中这块要用户来调用,5以后系统会自动调用
[/code]
上述是我遇到的问题.
最后发现dvc.view不是没有正确显示,而是一闪而过.
因为没有对dvc retain, 或者说dvc没有被任何对象所引用,所以会自动调用dealloc,从而动view一闪而过(其实看不到).
写得不错哈,一不留神就写这么多了。如果有结合实践得出来的经验或者小技巧就更喜欢了。哈哈
真工作起来..很难有时间写文章,写总结.