【问题标题】:UITabBar's navigationbar hides navigationbar when view is presented modallyTabBar 导航栏在视图以模态显示时隐藏导航栏
【发布时间】:2011-05-30 08:40:56
【问题描述】:

我有带有导航控制器的 UItabBarTemplate 的应用程序。
在选择标签栏 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 类型的选项卡时,我尝试了

[self presentModalViewController:objMFMailComposeViewController animated:YES];

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

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

但是由 UITabbarTemplate 创建的 tabbar 和 viewcontroller 不会出现这个问题。
为什么会这样?创建标签栏时出了什么问题?

【问题讨论】:

    标签: iphone uitabbarcontroller uinavigationbar


    【解决方案1】:

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

    -除此之外,您的代码没有调用 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];
    

    【讨论】:

    • okyeee 所以 viewWillAppear 只有在视图以模态方式呈现或推送到导航堆栈时才会被调用。 ....hnmm ...我已经尝试为每个视图控制器创建导航控制器,但是如果导航栏保持可见并且如果原始隐藏,那么我将失去原始导航栏的跟踪:(
    • 为什么以模态方式呈现的视图导航栏隐藏在原始导航栏后面?如果我以模态方式呈现,那么它只会覆盖 parentViewController 的视图???
    • 1) 是的,它看起来很破旧,这就是为什么不建议使用两个 tabbarViewControllers。所以改为在您的 pieChartViewController 中放置一个自定义工具栏。并用它来交换视图。 2)我不认识的导航部分;你能试试[self.navigationController presentModal...];这不应该工作,但只是一个尝试。 :)
    【解决方案2】:

    模态显示的新视图隐藏导航栏的原因在于 [self.view addSubview:tabbar.view];
    所以它有空间只在父控制器视图中展示它的视图,因此它的导航栏被剪掉了。
    所以为了破解它,我保持选项卡处于选中状态,而不是在选定的视图控制器中显示它,只在主视图控制器中显示它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 2019-03-12
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      相关资源
      最近更新 更多