显示新视图控制器的最佳实践 (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 中观察模型变化的最佳实践
AFNetworking 最佳实践将逻辑与视图控制器和职责分离以显示数据