Iphone 以模式显示视图时,UITabBar的导航栏隐藏导航栏

Iphone 以模式显示视图时,UITabBar的导航栏隐藏导航栏,iphone,uitabbarcontroller,uinavigationbar,Iphone,Uitabbarcontroller,Uinavigationbar,我有一个带UItabBarTemplate和导航控制器的应用程序。 选择选项卡栏时,将显示ViewControllerA,该控件在按钮上按下继承UIViewController的UIPieChartTabController。 现在我想在UIPieChartTabController中创建另一个选项卡栏。 因此,在UIPieChartTabController的viewDidLoad中 - (void)viewDidLoad { [super viewDidLoad]; UI

我有一个带UItabBarTemplate和导航控制器的应用程序。 选择选项卡栏时,将显示ViewControllerA,该控件在按钮上按下继承UIViewController的UIPieChartTabController。 现在我想在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类型的选项卡时,我尝试了

[self presentModalViewController:objMFMailComposeViewController animated:YES];
但objMFMailComposeViewController的navigationController隐藏在显示objMFMailComposeViewController的视图的navigationController后面

此外,绑定到选项卡栏的所有视图控制器的视图都将显示VIEWDIDEVIEW,但从未调用

但是,对于由UITabbarTemplate创建的tabbar和viewcontroller,这些问题都不会发生。
为什么会这样?创建选项卡栏时出现了什么问题

不建议在tabbarVC中放置另一个tabBar。为什么不使用UIToolBar在PieChartVC中交换视图呢

-除此之外,代码不调用ViewWillDisplay、ViewDidDisplay的原因是:

[tabbar setViewControllers:[NSArray arrayWithObjects:pr,pr1,pr2,pr3,nil]];
[self.view addSubview:tabbar.view];
此处仅调用这些prs的loadView

您指定给选项卡栏的ViewController应环绕UINavigationController

因此,像这样的东西反而会起作用

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

当前显示的新视图之所以隐藏其导航栏,原因在于[self.view addSubview:tabbar.view]; 因此,它有空间仅在父控制器视图中显示其视图,从而切断了其导航栏。
因此,为了破解它,我将选项卡保持选中状态,而不是在选定的视图控制器中显示它,而是仅在主视图控制器中显示它。

okyeee,因此只有以模式显示视图或在导航堆栈上推送视图时,才会调用ViewWillDisplay。。。。hnmm…我已经尝试为每个viewcontroller创建导航控制器,但是如果导航栏和原始导航栏都保持可见,并且如果原始导航栏隐藏,那么我将丢失原始导航栏的跟踪:为什么视图的导航栏会隐藏在原始导航栏后面?如果我以模式显示,使其仅覆盖parentViewController的视图???1是的,它看起来很破旧,这就是为什么不建议使用两个TabbarViewController的原因。因此,在pieChartViewController中放置一个自定义工具栏。并使用它交换视图。2导航部分我不认识,伙计;你能试试[self.navigationController presentModal…];这不应该奏效,只是一次尝试