【问题标题】:best-practices for displaying new view controllers ( iPhone )显示新视图控制器的最佳实践 (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]; 
}

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

【问题讨论】:

    标签: iphone xcode viewcontroller


    【解决方案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 开发了,所以如果我更严格地看待它,我不确定我是否还会推荐这种方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      相关资源
      最近更新 更多