从视图控制器加载 Tabbar 控制器

Posted

技术标签:

【中文标题】从视图控制器加载 Tabbar 控制器【英文标题】:loading Tabbar controller from view controller 【发布时间】:2010-10-07 05:09:14 【问题描述】:

我正在处理一个项目,其中我必须有一个登录页面,成功登录后,当我尝试使用以下代码加载标签栏控制器时,我们应该有一个标签栏视图(我正在使用标签栏控制器)。什么都解决不了。

LoginSuccess *viewController = [[LoginSuccess alloc] initWithNibName:@"LoginSuccess" bundle:nil];
        [self.view addSubview:viewController.tabBarController.view];
        [viewController release];

请帮帮我。

【问题讨论】:

【参考方案1】:

我做同样的工作,但我在登录响应成功后调用 appdelegate [mAppDelegate loadTabbar];//在委托文件中调用函数来加载代码跟随的标签栏视图

#pragma mark -
#pragma mark Load TabBar
-(void)loadTabBar

    self.tabBarController = [[UITabBarController alloc] init];
    tabBarController.delegate = self;

    MyAlarmVC *myAlarmVC = [[MyAlarmVC alloc] initWithNibName:@"MyAlarmVC" bundle:nil];
    UINavigationController *myAlarmNVC = [[UINavigationController alloc] initWithRootViewController:myAlarmVC];
    myAlarmNVC.navigationBar.tintColor = [UIColor whiteColor];
    [myAlarmVC release];


    MyVideosVC *myVideoVC = [[MyVideosVC alloc] initWithNibName:@"MyVideosVC" bundle:nil];
    UINavigationController *myVideoNVC = [[UINavigationController alloc] initWithRootViewController:myVideoVC];
    myVideoNVC.navigationBar.tintColor = [UIColor whiteColor];
    [myVideoVC release];


    MyFriendsVC *myFriendVC = [[MyFriendsVC alloc] initWithNibName:@"MyFriendsVC" bundle:nil];
    UINavigationController *myFriendNVC = [[UINavigationController alloc] initWithRootViewController:myFriendVC];
    myFriendNVC.navigationBar.tintColor = [UIColor whiteColor];
    [myFriendVC release];


    MyMessageVC *myMessageVC = [[MyMessageVC alloc] initWithNibName:@"MyMessageVC" bundle:nil];
    UINavigationController *myMessageNVC = [[UINavigationController alloc] initWithRootViewController:myMessageVC];
    myMessageNVC.navigationBar.tintColor = [UIColor whiteColor];
    [myMessageVC release];

    MyProfileVC *myProfileVC = [[MyProfileVC alloc] initWithNibName:@"MyProfileVC" bundle:nil];
    UINavigationController *myProfileNVC = [[UINavigationController alloc] initWithRootViewController:myProfileVC];
    myProfileNVC.navigationBar.tintColor = [UIColor whiteColor];
    [myProfileVC release];

    tabBarController.viewControllers = [NSArray arrayWithObjects:myAlarmNVC,myVideoNVC, myFriendNVC,myMessageNVC,myProfileNVC, nil];
    [myAlarmNVC release];
    [myVideoNVC release];
    [myProfileNVC release];
    [myFriendNVC release];
    [myMessageNVC release];
    [self.window addSubview:tabBarController.view ];
    //tabBarController.navigationController.navigationBarHidden = YES;
    [self.tabBarController release];



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

    NSArray *vc= tabBarController1.viewControllers;

    for (int i = 0; i < [vc count]; i++) 

        UINavigationController *nc = [vc objectAtIndex:i];

        if (nc == tabBarController1.selectedViewController) 

            continue;
        

[nc popToRootViewControllerAnimated:NO];
    


如果您遇到问题,请告诉我您的标签栏的视图名称

【讨论】:

这是我的 appdelegate.h 文件中的 UIWindow *window; UIViewController *rootViewController; UITabBarController *loginTabbarController;您能否解释一下为什么要使用导航 cpntroller。在我的应用程序中,我不需要导航控制器。我想在标签栏控制器中拥有的视图名称是地图、日历和记录。 你能告诉我你的项目的后续,这样我就可以告诉正确的代码; 在上面的代码中,我进入登录屏幕,当我输入登录按钮然后调用 web 服务时,它返回响应为 false;如果我成功,则调用函数 loadtabbar,它在 appdelegate 中声明 如果你不想添加导航控制器然后删除导航控制器行只需放置视图的对象名称 tabBarController.viewControllers = [NSArray arrayWithObjects:myAlarmVC,myVideoVC, myFriendVC,myMessageVC,myProfileVC, nil]; 这是我添加到appdelegate.m中的函数

以上是关于从视图控制器加载 Tabbar 控制器的主要内容,如果未能解决你的问题,请参考以下文章

iOS:Tabbar - 加载选项卡的默认状态

加载新的 TabBar 视图时如何卸载 TabBar 视图?

Swift:通过 TabBar 和导航控制器以编程方式从一个视图转换到另一个视图

如何从控制器内部关闭 TabBar 控制器?

添加 TabBar 元素

如何从自定义集合视图单元(使用 xib 创建的单元)到 tabBar 控制器创建自定义 segue