Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何嵌套NavigationController->;Tabbar控制器->;{NavigationController,NavigationController}_Ios_Objective C - Fatal编程技术网

Ios 如何嵌套NavigationController->;Tabbar控制器->;{NavigationController,NavigationController}

Ios 如何嵌套NavigationController->;Tabbar控制器->;{NavigationController,NavigationController},ios,objective-c,Ios,Objective C,(问题7) 我知道将TabBarController放在NavigationController中是不好的。但是,如果真的需要,有什么解决办法吗? stroyboard类似于“” 问题是: 在'ItemTVC'中,backBarItem将不会弹出到其父'SampleTVC',但会弹出到根'ProjTVC',为什么 在“SampleTVC”中,如果调用:[self.navigationController setNavigationBarHidden:NO]和[self.navigationCon

(问题7) 我知道将TabBarController放在NavigationController中是不好的。但是,如果真的需要,有什么解决办法吗? stroyboard类似于“”

问题是:

  • 在'ItemTVC'中,backBarItem将不会弹出到其父'SampleTVC',但会弹出到根'ProjTVC',为什么

  • 在“SampleTVC”中,如果调用:
    [self.navigationController setNavigationBarHidden:NO]


    [self.navigationController.navigationController setNavigationBarHidden:YES]

    隐藏根导航栏并显示最近的祖先导航栏,如何将最近祖先导航栏的LeftBarButtonim设置为根导航项的BackBarButtonim

  • 如果两个导航栏都未隐藏,则根导航栏将占主导地位(显示在最近的祖先导航栏的顶部。但是,如何将RightBarButtonim添加到根导航栏?我尝试了:
    uiBarButtonim*addButton=[[uiBarButtonim alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd目标:自操作:@selector(insertNewObject:)]
    self.navigationItem setRightBarButtonItem:addButton
    ,但未显示任何按钮

  • 设置self.navigationController.backbarbutionItem对其后续导航视图没有任何影响。它始终为零

  • 在我看来,当TabBarController和NavigationController混合在这个配置中时,
    self.navigationItem
    会变得一团糟


    (我使用的一个丑陋的解决方案是:首先隐藏根导航栏,然后将UIBarButtonItem分配给最近祖先导航栏的leftBarButtonItem,然后调用
    [self.navigationController.navigationController popViewControllerAnimated:YES]

    但此按钮的样式将与“BackBarButtonItem”的样式不同。如何在其他导航栏的项目中获取当前显示的BackBarButtonItem的副本?)

    无论从架构还是用户体验的角度来看,您都不应该这样做。但是……您不需要第二套导航控制器。它们应该使用根导航控制器的推送和弹出功能。导航控制器中的选项卡控制器不好。但na中选项卡控制器中的导航控制器不好v控制器更糟糕

    编辑:


    如果要修复导航项目,需要在选项卡控制器上设置它们。它是导航控制器上的“当前”视图控制器,因此其导航项目将显示在导航栏上。

    谢谢您的提示。我已删除导航控制器。现在它可以正确切换。(问题1已解决)

    关于缺少RightBarButton,我实际上通过将
    self.navigationItem.rightBarButtonItem=addButton;
    添加到自定义tabBarController的viewDidLoad中来解决,然后在tabBarController的子控制器中添加

    if (self.tabBarController) {     
    self.tabBarController.navigationItem.rightBarButtonItem = addButton;}
    else{self.navigationItem.rightBarButtonItem = addButton;
    }
    

    发现
    self.navigationItem
    在选项卡控制器中时实际上是隐藏的,这真的很棘手。实际显示的导航栏实际上来自
    self.tabBarController.navigationItem

    谢谢你的提示。我已经删除了tabBarController中的导航控制器。现在它可以正确地进行分段了。(问题1已解决)@wanyancan您需要在tab控制器上设置导航项。导航控制器从他们所持有的俯视图控制器中选择导航项。我想您的意思是使用
    self.tabBarController.navigationItem
    ,对吗?我知道了。我觉得这似乎违反直觉。不应该
    self.navigationItem
    无论屏幕导航栏上显示的是什么项目,无论
    self
    包含在什么内容中?@wanyancan当您没有如此糟糕的体系结构时,就是这样。请接受答案?您的答案被接受。但是,我确实认为在这种特殊情况下,导航项目访问不应该与“norm”有任何不同阿尔的等级制度。