当模式显示视图时,TabBar导航栏隐藏导航栏

时间:2010-12-24 10:02:34

标签: iphone uitabbarcontroller uinavigationbar

我有带有导航控制器的UItabBarTemplate app 在选择标签栏时,会显示ViewControllerA,按钮触摸按下UIPieChartTabController,继承“UIViewController”。
现在我想在UIPieChartTabController中使用另一个标签栏 所以在UIPieChartTabController的viewDidLoad中

- (void)viewDidLoad {
    [super viewDidLoad];

     UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
     contentView.backgroundColor = [UIColor whiteColor];
     self.view = contentView;
     [contentView release];
      UITabBarController *tabbar= [[UITabBarController alloc] init];
     tabbar.view.frame = CGRectMake(0, 0, 320, 460);
    piechartViewController *pr=[[piechartViewController alloc]init];
    pr.tagInAction=1;
    pr.title=@"Type";
    pr.tabBarItem.image=[UIImage imageNamed:@"trend.png"];
    pr.sDate=sDate;
    pr.nDate=nDate;

    piechartViewController *pr1=[[piechartViewController alloc]init];
    pr1.title=@"category";
    pr1.tagInAction=4;
    pr1.sDate=sDate;
    pr1.nDate=nDate;

    piechartViewController *pr2=[[piechartViewController alloc]init];
    pr2.title=@"paidWith";
    pr2.tagInAction=3;
    pr2.sDate=sDate;
    pr2.nDate=nDate;

    //tabbar.tabBar.delegate=self;
//this gave me error

    ExportRep *pr3=[[ExportRep alloc]init];
    pr3.tabBarItem.image=[UIImage imageNamed:@"database.png"];
    pr3.title=@"Export Expenses";

    [tabbar setViewControllers:[NSArray arrayWithObjects:pr,pr1,pr2,pr3,nil]];
    [self.view addSubview:tabbar.view];
    [pr release];
    [pr1 release];
    [pr2 release];
}

这段代码有效但现在当我选择viewController ExportRep类型的tab时,我试过

[self presentModalViewController:objMFMailComposeViewController animated:YES];

但objMFMailComposeViewController的navigationController隐藏在呈现objMFMailComposeViewController的视图的navigationController后面。

另外viewWillAppear viewDidAabar绑定到标签栏的所有视图控制器永远不会被调用。

但是,由UITabbarTemplate创建的tabbar和viewcontroller都不会出现这个问题 为什么会这样?我创建Tab栏时有什么问题?

2 个答案:

答案 0 :(得分:0)

不建议在tabbarVC中放置另一个tabBar。为什么不使用UIToolBar来替换PieChartVC中的Views呢?

- 从那里开始,你的代码没有调用viewWillAppear,viewDidAppear是因为:

[tabbar setViewControllers:[NSArray arrayWithObjects:pr,pr1,pr2,pr3,nil]];
[self.view addSubview:tabbar.view];

这里只会调用那些prs的loadView。

您分配给tabBars的viewControllers应该包含在UINavigationControllers周围。

所以这样的事情就可以解决问题

UINavigationController *nc1 = [[UINavigationController alloc]initWithRootViewController:pr];
[nc1.view setFrame:CGRectMake:("the frame in which you wnt prs to be displayed")];
[pr.view setFrame:nc1.view.frame];
. // similarly assign NavControllers for all prs
.
.
.
[tabbar setViewControllers:[NSArray arrayWithObjects:nc,nc1,nc2,nc3,nil]];
    [self.view addSubview:tabbar.view];

答案 1 :(得分:0)

以模态方式呈现的新视图隐藏导航栏的原因在于 [self.view addSubview:tabbar.view];
因此它只有在父控制器视图中显示其视图的空间,因此切断了它的导航栏 所以要破解它我选择了选项卡,而不是在选定的视图控制器中显示它,只在主视图控制器中显示它。