代码之家  ›  专栏  ›  技术社区  ›  WoodenKitty

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

  •  2
  • WoodenKitty  · 技术社区  · 15 年前

    当前,对于我要显示的每个屏幕,我在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 回复  |  直到 15 年前
        1
  •  3
  •   Jesse Anderson    15 年前

    如果您没有: 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
  •  1
  •   Ian Henry    15 年前

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