1

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

应用委托:

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

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

4

2 回答 2

3

既然你问什么是最有效的方法,那很容易。使用故事板

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

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

这会在模拟器中生成以下应用程序:

iOS 模拟器

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

应用代理

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

于 2013-09-06T12:21:37.313 回答
0
- (IBAction)HelpClicked:(id)sender
{

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

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

}

试试这个...

于 2013-09-06T04:41:52.510 回答