显示新视图控制器的最佳实践 (iPhone)

Posted

技术标签:

【中文标题】显示新视图控制器的最佳实践 (iPhone)【英文标题】:best-practices for displaying new view controllers ( iPhone ) 【发布时间】:2010-02-16 05:17:46 【问题描述】:

我需要显示几个视图控制器(例如,登录屏幕、注册屏幕等)。调出每个屏幕的最佳方式是什么?

目前,对于我想显示的每个屏幕,我在应用程序委托中调用不同的方法,如下所示: 代码:

- (void) registerScreen

 RegistrationViewController *reg = [[RegistrationViewController alloc] initWithNibName:@"RegistrationViewController" bundle:nil];
 [window addSubview:reg.view]; 

- (void) LoginScreen

 LoginViewController *log = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
 [window addSubview:log.view]; 

它有效,但我无法想象这是最好的方法。

【问题讨论】:

【参考方案1】:

如果您还没有阅读 View Controller Programming Guide,我建议您阅读:http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

听起来以模态方式呈现视图控制器可能是您最好的选择 - 但您可能希望先将其包装在 UINavigationController 中。

例如

UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:theControllerYouWantToPresent] autorelease];
[self presentModalViewController:navController animated:YES];

【讨论】:

【参考方案2】:

我经常想知道这是否是我自己最好的方法,但是当我不使用 IB 的内置东西(如 NavigationController)时,我在 AppDelegate 中有一个方法,switchToViewController:(UIViewController *)viewController 我通过了.. .好吧,我想这很不言自明。这样就只有一个地方完成了,一旦应用程序接近完成,我就可以轻松地在该方法中定义转换。

另外,不要忘记在你的方法中删除以前的视图,否则你可能会耗尽内存。像这样的:

-(void) switchToViewController:(UIViewController *)c 
    if(c == currentController) return;

    [currentController.view removeFromSuperview];
    [window addSubview:c.view];
    [currentController release];
    currentController = [c retain];

【讨论】:

有趣,那你怎么称呼它?您是否像往常一样分配和初始化您的新 ViewController,然后将其传递给它? @Chris - 我相信在我写这篇文章的时候我就是这么做的。我也试过让AppDelegate 包含它的控制器列表,所以它更像[app switchToViewController:app.WhateverController]。这具有易于保存状态的优点。 (我的控制器实际上是UIViewController 的子类,所以它们都包含对AppDelegate 的引用)。不过,我已经将近一年没有做过任何 ios 开发了,所以如果我更严格地看待它,我不确定我是否还会推荐这种方法。

以上是关于显示新视图控制器的最佳实践 (iPhone)的主要内容,如果未能解决你的问题,请参考以下文章

KVO 在 UITableView 中观察模型变化的最佳实践

ios/iphone sdk 表单管理最佳实践

应用程序中多个 UIWindow 的最佳实践

AFNetworking 最佳实践将逻辑与视图控制器和职责分离以显示数据

Navigation iPhone App 的核心数据最佳实践问题

iOS - 为帖子 + 评论数据模型设置视图控制器的最佳实践是啥?