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

时间:2010-02-16 05:17:47

标签: iphone xcode viewcontroller

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

目前,对于我想要显示的每个屏幕,我在app delegate中调用了一个不同的方法,如下所示: 代码:

- (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]; 
}

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

2 个答案:

答案 0 :(得分:3)

如果您没有:http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

,我建议您阅读View Controller编程指南

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

例如

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

答案 1 :(得分:1)

我经常想知道这是否是我自己最好的方式,但是当我没有使用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];
}