选项卡控制器未显示。

3

我想以编程方式创建tabbarcontroller。但是tabBarController未在页面上显示。有人能告诉我出了什么问题吗?并且我们可以在一个应用程序中创建多个tabbarcontroller吗?

ViewController.m
- (void)viewDidLoad
{
    report=[[UIViewController alloc]initWithNibName:@"ViewController" bundle:nil];
    View1 *template=[[View1 alloc]initWithNibName:@"View1" bundle:nil];
    View2 *acc=[[View2 alloc]initWithNibName:@"View2" bundle:nil];
    View3 *four=[[View3 alloc]initWithNibName:@"View3" bundle:nil];
    View4 *five=[[View4 alloc]initWithNibName:@"View4" bundle:nil];   

    nav1=[[UINavigationController alloc]initWithRootViewController:report];
    nav2=[[UINavigationController alloc]initWithRootViewController:template];
    nav3=[[UINavigationController alloc]initWithRootViewController: acc];
    nav4=[[UINavigationController alloc]initWithRootViewController:four];
     nav5=[[UINavigationController alloc]initWithRootViewController:five];

    UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Title" image:[UIImage  imageNamed:@"singleicon.png"] tag:0];
    UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"Reports" image:[UIImage imageNamed:@"doubleicon.png"] tag:1];
    UITabBarItem *item2 = [[UITabBarItem alloc] initWithTitle:@" New " image:[UIImage imageNamed:@"clockicon.png"] tag:2];
    UITabBarItem *item3=[[UITabBarItem alloc]initWithTitle:@"four" image:[UIImage imageNamed:@"dependenticon.png"] tag:3];
    UITabBarItem *item4=[[UITabBarItem alloc]initWithTitle:@"five" image:[UIImage imageNamed:@"toolicon.png"] tag:4];

    nav1.tabBarItem = item;
    nav2.tabBarItem = item1;
    nav3.tabBarItem = item2;
    nav4.tabBarItem=item3;
    nav5.tabBarItem=item4;

    //[item1 setBadge:@"25"];
    self.tabBarController=[[UITabBarController alloc]init];
    [self.tabBarController setViewControllers:[NSArray arrayWithObjects:nav1,nav2,nav3,nav4,nav5,nil]];

    self.report = self.tabBarController;
  // [self.report makeKeyAndVisible];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

请按照我的答案进行操作:http://stackoverflow.com/questions/13856933/tabbar-in-second-view/13857070#13857070 - Rajneesh071
5个回答

1
请使用以下代码:
     self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1,nav2,nav3,nav4,nav5,nil]];
     self.window.rootViewController = self.tabBarController;

更新:

同样对于隐藏和显示UITabBar,请使用以下代码...

将此方法放入AppDelegate.m文件中,当您想要隐藏标签栏时,只需创建AppDelegate对象并调用下面的hideTabBar方法即可。

- (void) hideTabBar:(UITabBarController *) tabbarcontroller {

    int height = 480;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];

    for(UIView *view in tabbarcontroller.view.subviews) {
        if([view isKindOfClass:[UITabBar class]]) {
            [view setFrame:CGRectMake(view.frame.origin.x, height, view.frame.size.width, view.frame.size.height)];
        } 
        else {
            [view setFrame:CGRectMake(view.frame.origin.x,view.frame.origin.y, 320, 436)];
        }
    }
    [UIView commitAnimations];
}

- (void) showTabBar:(UITabBarController *) tabbarcontroller {

    int height = 436;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3]; 

    for(UIView *view in tabbarcontroller.view.subviews) {

        if([view isKindOfClass:[UITabBar class]]) {
            [view setFrame:CGRectMake(view.frame.origin.x, height, view.frame.size.width, view.frame.size.height)];            
        } 
        else {
            [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, height)];
        }
    }    

    [UIView commitAnimations];
}

先生,我已经在viewController.m中完成了这个任务,而不是在appdelegate中,所以为什么我要使用window呢? - Vivek Sehrawat
如果您想将tabbarcontroller设置为根视图控制器,那么可以像这样设置,只需创建AppDelegate对象并编写appDelegate.window而不是self.window。 - Paras Joshi
1
不要使用480作为高度,因为iPhone 5的高度不同。请改用[[UIScreen mainScreen] bounds].size.height。 - Nikita P
@NikitaP 是的,亲爱的,这里也要根据当前方向更改高度和宽度...我只是提供了我使用的想法或代码来完成任务,谢谢。 :) - Paras Joshi
这个好像不起作用,你能告诉我你的电子邮件地址,这样我就可以把我的文件发送给你。 - Vivek Sehrawat
显示剩余5条评论

1
将所有的代码放在按钮的操作中,并像这样推动tabBarController
[self.navigationController pushViewController:tabBarController animated:YES]; 

0
如果您想以编程方式添加UITabBarController,则需要将您的tabbarcontroller添加到您的ViewController中。您需要使用以下代码行:
[self.view addSubview:self.tabBarController.view];

1
不,这不是正确的方法。Paras Joshi 给出了正确的答案。 - Tom van Zummeren

0

我刚刚做了这个

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

0
你需要在视图中添加tabBarController,你漏掉了一行代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接