视图切换

视图切换
在多视图程序中,怎么从一个视图切换到另一个视图呢?

Ios主要有两类组织内容的方式:

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一闪而过(其实看不到).

 

2 Comments