最有效的方式来显示另一个ViewController

时间:2013-09-06 04:38:58

标签: ios objective-c uiviewcontroller uitabbarcontroller

我有一个具有主视图控制器(登录控制器)的应用程序。如果授权完成,我将向用户显示另一个控制器(tabBarController)。我是这样做的:

AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    LogInViewController *logInController = [[[LogInViewController alloc] init] autorelease];

    _tabBarController = [[UITabBarController alloc] init] ;

    SearchViewController *searchController = [[[SearchViewController alloc] init] autorelease];
    CabinetViewController *cabinetController = [[[CabinetViewController alloc] init] autorelease];
    HelpViewController *helpController = [[[HelpViewController alloc] init] autorelease];
    CatalogViewController *catalogController = [[[CatalogViewController alloc] init] autorelease];    

    NSArray *controllerArray = [NSArray arrayWithObjects:cabinetController, catalogController, searchController, helpController, nil];

    [_tabBarController setViewControllers:controllerArray];

    //[navController setViewControllers:controllerArray];
    [self.window setRootViewController:logInController];
    [self.window makeKeyAndVisible];
    return YES;
}

然后在按钮事件上我做了这个:

-(void)logInUser:(id)sender
{
    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    [delegate.window setRootViewController:delegate.tabBarController];
    [delegate.tabBarController setSelectedIndex:0];
    [self.view removeFromSuperview];
}

如何以更有效的方式做这种事情???提前谢谢大家。

2 个答案:

答案 0 :(得分:3)

既然你问的是哪种效率方式最多,那很容易。使用故事板

这确实是故事板旨在解决的问题。您可以创建所有视图控制器,设置许多所需的属性 - 包括您希望外部导航控制器隐藏其导航栏的事实 - 在故事板本身中,您将获得实时编辑器你可以反弹想法。最好的部分?您可以使用 zero 代码行中的Storyboard完成问题中描述的所有操作。这就是编写和维护的零行代码。真实的故事。我会证明的!

我在下面的故事板中模仿了你在问题中描述的内容: Storyboard

这导致模拟器中的以下应用程序:

iOS Simulator

最好的部分,这是此应用程序中整个代码的屏幕截图:

App Delegate

我认为它没有比这更有效率。如果您是故事板的新手,我强烈建议您阅读Ray Wenderlich Beginning Storyboards in iOS 5的精彩初学者指南。

答案 1 :(得分:0)

- (IBAction)HelpClicked:(id)sender
{

     _tabBarController = [[UITabBarController alloc]initWithNibName:@"UITabBarController" bundle:nil]; ;

    [self.navigationController pushViewController:_tabBarController animated:YES];

}

尝试这个...