Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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
iPhone:多个视图的同一底部栏_Iphone_Window_Uitabbarcontroller - Fatal编程技术网

iPhone:多个视图的同一底部栏

iPhone:多个视图的同一底部栏,iphone,window,uitabbarcontroller,Iphone,Window,Uitabbarcontroller,我想在视图中添加一个底部栏,然后在浏览多个视图(每个视图都有一个nab栏)时将其保留在那里。我希望它能遵循苹果的指导方针(我已经知道只有nab栏是推荐的),或者至少该应用程序能被接受。 为此,我在应用程序窗口中添加了一个UIView。此UIView包含一个UIAbbarController,其中包含每个条目的导航控制器(每个都作为rootviewController): UIWindow *window=[[UIApplication sharedApplication] keyWindow];

我想在视图中添加一个底部栏,然后在浏览多个视图(每个视图都有一个nab栏)时将其保留在那里。我希望它能遵循苹果的指导方针(我已经知道只有nab栏是推荐的),或者至少该应用程序能被接受。 为此,我在应用程序窗口中添加了一个UIView。此UIView包含一个UIAbbarController,其中包含每个条目的导航控制器(每个都作为rootviewController):

UIWindow *window=[[UIApplication sharedApplication] keyWindow];
MyUIViewController *mv=[[MyUIViewController alloc]init];
UINavigationController *navd = [[UINavigationController alloc] initWithRootViewController:mv];
navd.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"MyItem" image:[UIImage imageNamed:@"myImage.png"] tag:0];
NSMutableArray *controllers = [[NSMutableArray alloc] init];
[controllers addObject:navd];
UITabBarController *tbarController=[[UITabBarController alloc] init]; 
tbarController.viewControllers = controllers; 
tbarController.customizableViewControllers = controllers;
UIView *vistaBarraInferior=tbarController.view;
[window addSubview:vistaBarraInferior]; 
[window makeKeyAndVisible];
它可以工作,但当我想返回并使用UITabBarController退出常春藤时,我的问题就出现了。如果我写:

[self.tabBarController.view removeFromSuperview];
[self.parentViewController.navigationController popViewControllerAnimated:YES];
选项卡栏已从当前视图中删除,但我无法访问上一个视图(我在执行任何操作之前拥有的根视图),因为我已用“initWithRootViewController”覆盖了它

有没有其他方法可以让事情变得更简单或者解决这个问题


提前感谢。

您应该使用带有导航控制器阵列的tabbarcontroller。例如,请参见apple示例代码


我检查了你的代码,它在不同的级别上看起来不正确。例如,您正在调用initwithviewcontroller,但正在传递uiview。这是不正确的。

如果要组合选项卡栏和导航栏,必须将选项卡栏用作根目录,并为每个选项卡项添加一个导航控制器。您不能以相反的方式执行此操作,因为选项卡栏必须始终为根

我不知道你想用底部的横杆实现什么。它应该用作选项卡栏还是工具栏。请记住,如果使用选项卡栏,则每个选项卡都有自己的视图堆栈,由导航控制器管理。另一方面,工具栏与一个视图相关

如果您想创建类似“覆盖工具栏”(overlay toolbar)的内容,即即使视图在内外设置动画,也始终位于视图顶部的内容,则需要选择不同的解决方案


例如,您可以创建自己的控制器,该控制器将在底部显示工具栏和一些容器视图,其中的内容将由导航控制器管理。

如果我以其他方式重写此代码:

        UITabBarController *tabBar=[[UITabBarController alloc]init];
        tabBar.title=@"MyTitle";
        NSMutableArray *items=[[NSMutableArray alloc]init];
        MyUIViewController *ld = [[MyUIViewController alloc] init];
        [tabBar addChildViewController:ld];            
        UITabBarItem *tabItem=[[UITabBarItem alloc]initWithTitle:@"Item1" image:[UIImage imageNamed:@"myImage.png"] tag:0];
        [items addObject:tabItem];
        [tabItem release];
        [tabBar setToolbarItems:items];
        [self.navigationController pushViewController:tabBar animated:YES];
结果是底部的选项卡栏为空。我是否忘记写其他东西来显示选项卡栏项


如果我添加第二个项目,则只显示其标题,而不显示其图像或与第一个项目相关的任何内容。

我认为这就是我实际正在做的事情。