-2

这是一个基于视图的应用程序。

在 delegate.m 文件中,我最初这样做是为了启动登录屏幕:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
  [window addSubview:viewController.view];
  [window makeKeyAndVisible];

  LoginView *loginView=[[LoginView alloc]initWithNibName:@"LoginView" bundle:nil];

  [window addSubview:loginView.view];
}

通过添加上面的代码,我成功启动了登录屏幕,但在我的登录屏幕底部,我可以看到一个空格。

成功登录后如何启动标签栏控制器?

我在我的 LoginView.m 文件中创建了一个名为 login 的方法:

-(void)login
{
  if(login)
  {
    TabBarController *tabBarController = [[TabBarController alloc] initWithNibName:@"TabBarController" bundle:nil];

    [self.view addSubView: aTabBarController.view];
  }

    [aTabBarController release];

请使用适当的代码帮助我解决这个问题。

4

3 回答 3

1

您的登录视图(或者如果您有一个看起来没有的控制器,则它是控制器)应该告诉 appDelegate 将 RootViewController 交换为 taBarController。您不希望登录视图尝试将 tabBar 添加为自身的子项。

于 2011-12-15T10:40:27.087 回答
1

一种方法是在您的 appdelegate 中像平常一样创建一个 tabbarcontroller 并将其设置为 rootviewcontroller:

TOTabBarController *tabBarController = [[TOTabBarController alloc] init];

UIViewController *vc1 = [[UIViewController alloc] initWithNibName:nil bundle:nil];
UIViewController *vc2 = [[UIViewController alloc] initWithNibName:nil bundle:nil];
UIViewController *vc3 = [[UIViewController alloc] initWithNibName:nil bundle:nil];

UINavigationController *vc2_nc = [[UINavigationController alloc] initWithRootViewController:vc2];
UINavigationController *vc3_nc = [[UINavigationController alloc] initWithRootViewController:vc3];

NSArray *viewControllers = [NSArray arrayWithObjects:vc1, vc2_nc, vc3_nc, nil];

[tabBarController setViewControllers:viewControllers];

//set tabbarcontroller as rootviewcontroller
[[self window] setRootViewController:tabBarController];

如果用户未登录,则以模态方式显示登录屏幕(无动画):

if (not logged in) {
    UIViewController *lvc_nc = [[UIViewController alloc] init];
    [[[self window] rootViewController] presentModalViewController:lvc_nc animated:NO];
}

希望有帮助!

于 2011-12-15T10:55:55.330 回答
1

您必须在 appDelegate 中创建 on 方法,例如.. 而在 appDelegate.h 中,您必须创建一个像这样的对象

UITabBarController *Obj_tabbar;

然后在 .m 文件中,

-(void) switchToTabbarController    
{    
    Obj_tabbar.delegate = self;
    Obj_tabbar.selectedIndex = 0;
    Tracking_HomeVC *obj = [[Tracking_HomeVC alloc]init];
    [self tabBarController:Obj_tabbar didSelectViewController:obj];
    [self.window addSubview:Obj_tabbar.view];

}

// 此时Tracking_HomeVC是TabbarController的第一个视图控制器。它将被添加到窗口中。

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

{

    if([tabBarController selectedIndex] == 0)
    {
       //Write your code here to do with the first view controller object.
    }

}

然后从您的 LoginView 中调用它,例如..

-(void)LoginPressed    
{    
     AppAppDelegate *delegate =(AppAppDelegate *) [[UIApplication sharedApplication] delegate];
     [delegate switchToTabbarController];    
}
于 2011-12-15T10:55:55.360 回答