0

对于不耐烦tabbarcontroller一个navigationcontroller:iPad应用程序的行为:用更多的标签

我想有一个navigationcontroller谁的根视图控制器是一个tabbarcontroller,类似iPad的应用程序。我正在使用IOS 5和故事板。

对于倾斜的读数:

以我的故事板我有在被在一个UINavigationController内嵌一个的UITabBarController 6个标签,给它一个“更多”按钮被示出3个标签之后。

这样做让我两个导航栏当按下更多:

double nav bar... what does it mean?!

于是我继承TabBarController:

//@implentation MyTabController 

- (void)viewDidLoad 
{ 
    self.moreNavigationController.wantsFullScreenLayout = NO; 
    self.delegate = self; 
} 

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    // hide nav bar if current controller is "More" controller 
    self.navigationController.navigationBarHidden = 
     viewController == self.moreNavigationController; 
} 

大,这给了我:

almost there

我的猜测是,我需要重新布局,以占据了状态栏的意见,所以我尽量

[self.view setNeedsLayout:YES]; 

,但我得到一个错误说的UIView不包含选择器,用于setNeedsLayout所以... 如何获得moreNavigationController.navigationBar来说明状态栏?

更新
我有第二个相关的问题与此。当我点击“编辑”按钮编辑控制器模式显示。其导航栏显示下的受保控制器(动画之后),并且未收到触摸。

+0

所以TabBarController被推入NavigatorController?如果是这种情况,那么不建议,应该为每个tabBar View控制器设置一个NavigatorController,并将TabBarController设置为主窗口根视图控制器。如果情况并非如此,我不知道发生了什么事情:P。 – Raspu 2012-06-14 16:41:24

+0

@Raspu这将解决我的大部分问题,但后退按钮呢?因为要这样做,我会以模态方式呈现标签栏,即使我向每个导航控制器添加了后退按钮,也不会有<__ |形状。 – 2012-06-14 17:57:32

+0

所以你想在显示tabbar之前能够回到屏幕?一个解决方案是将所有的导航控制器都放入先前的视图控制器,然后是你想要显示的那个(这样所有的导航栏都有后退按钮)。另外,你可以设置hidesBottomBarWhenPushed = YES到第一个视图控制器,这样它就不会显示tabBar。 – Raspu 2012-06-14 18:09:27

回答

1

不推荐将tabBarController推入NavController,而是为每个tabBar视图控制器设置NavigatorController,并将TabBarController设置为主窗口根视图控制器。

如果你希望能够在显示标签栏之前显示一个屏幕,一个解决方案是将所有的导航控制器推入前一个视图控制器,然后是你想要显示的那个(这样所有的导航栏都有后退按钮)。 然后将 hidesBottomBarWhenPushed = YES设置为第一个视图控制器,这样它就不会显示tabBar

示例代码:

UIViewController *prevc = [[UIViewController alloc] init]; 
//prevc.hidesBottomBarWhenPushed = YES; 

//Do this for every VC that will be a tabBarItem 
UIViewController *vc1 = [[UIViewController alloc] init]; 
UINavigationController *nv1 = [[UINavigationController alloc] initWithRootViewController:prevc]; 
[nv1 pushViewController:vc1 animated:NO]; 

//Remember to set the tabBarItem! 

UITabBarController *tb = [[UITabBarController alloc] init]; 
tb.viewControllers = [NSArray arrayWithObjects:nv1, nv2, nv3, nil]; 

我才意识到,设置hidesBottomBarWhenPushed到以前的ViewController将无法正常工作,但如果你表现出prevc第一,然后按以下的viewController,你不会有问题。但是,如果反正你wan't隐藏标签栏,而做一个弹出,请检查:

+0

我不能再接受几个小时的赏金。只是想知道是否有一种风格,我可以给一个uibarbuttonitem,使它看起来像一个后退按钮?我没有推动所有在Storyboard中设置的所有视图控制器。 – 2012-06-14 22:29:15

+0

据我所知,不可能将它塑造成后退按钮。但是,如果在设置先前的视图控制器时遇到问题,也许可以推送一个虚拟视图控制器,然后使用UINavigatorBar委托(请注意,我在谈论条形图,而不是控制器),以便在用户按下后退按钮(navigationBar:shouldPopItem :),并将以前的VC更改为所需的(我不确定是否可能)作为参考:http://developer.apple.com/library/ios/#documentation/uikit/reference /UINavigationBarDelegate_Protocol/Reference/Reference.html – Raspu 2012-06-15 02:56:35

+0

而且,实际上,您可以使用背景图像更改右侧的按钮形状(之前我已经完成了这个操作,但它在iOS上是3次,所以我不确定是否仍有可能)。 – Raspu 2012-06-15 02:58:15

0

我也面临着类似的问题。在我的应用程序中,导航控制器中还有一个Tabarcontroller。当我尝试以编程方式切换到更多导航控制器中的视图控制器时(如:[self.tabBarController setSelectedIndex:X];)我的应用程序中出现相同的问题。但下面的代码解决了我的问题。

self.tabBarController.moreNavigationController.navigationBarHidden = YES; 
相关问题