UITabBar Modal ViewContoller

时间:2011-05-21 15:07:54

标签: iphone ios uitabbarcontroller uitabbar modalviewcontroller

我正在尝试在另一个TabBarController之上呈现TabBarController。我的应用程序的MainWindow.xib如下所示:

Files Owner
First Responder
My App App Delegate
Window
TabBarContoller
    +TabBar
    +Nav Controller Subclass (a custom class)
        +Navigation Bar
        +Table View Contoller Subclass (custom class)
        +Tab Bar Item
    +Second View Controller (not yet hooked up)

我正在尝试在TableView中单击某个项目时显示xib文件。这个xib文件有一个TabBarController作为它的主视图,但是当显示视图时,标签栏和导航栏都是不可见的。我用来显示它的代码是:

MyAppAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.customNavController presentModalViewController:customDetailEditViewController animated:YES];

如果我使用下面的代码将视图控制器推入堆栈,我会看到正确的导航栏,但是显示了根视图控制器中的TabBar,而不是已被推送的视图中的TabBar。

[delegate.customNavController pushViewController:customDetailEditViewController animated:YES];

我甚至尝试删除TabBarController并手动实现我自己的TabBar委托,但会发生相同的效果(没有NavigationBar或TabBar,或来自根ViewController的NavigationBar / TabBar)。

编辑:我已将来源上传至http://mi6.nu/tabcontroller.zip。如果有更多iOS经验的人可以看一下,我真的很感激。

EDIT2 :我到目前为止最接近的是在第一个标签栏中显示模态视图控制器,所以我的视图如下所示:

NavigationBar  
[          ]
[          ] 
[---View---]
[          ] 
[          ] 
TabBar from the pushed view 
TabBar from the root view

为实现这一目标,我正在使用:

UITabBarController *tabBarController = [[UITabBarController alloc] init];

    UIViewController *directionsView = [[UIViewController alloc] init];
    txtDirections = [[UITextView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width, self.view.frame.size.height)]; 
    [directionsView.view addSubview:txtDirections];

    IconPickerViewController *iconPicker = [[IconPickerViewController alloc]init];
    tabBarController.viewControllers = [NSArray arrayWithObjects:recipeDetailEditViewController,directionsView,iconPicker, nil];
    [directionsView release];
    [iconPicker release];

    MyAppAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [delegate.rootNavController presentModalViewController:recipeDetailEditViewController animated:YES];

这只会使一切变得复杂,因为a)它并不理想,因为我有两个标签栏和b)所有控件(所有编辑控件)都需要在TableViewController中,因此可以加载/保存它们的值以编辑项目。如果推送的视图可以处理加载/保存并显示在根选项卡的顶部,那将会容易得多。

当然这一定是可能的吗?

2 个答案:

答案 0 :(得分:2)

这绝对是一场噩梦,但是当我点击添加按钮时,我最终通过从TableViewController以模态方式呈现视图来实现它:

[delegate.rootController presentModalViewController:recipeDetailEditViewController animated:YES];

delegate.rootController是根TabBarController 我呈现的XIB文件没有TabBarController,而是一个UIView,一个导航栏和一个TabBar。当从NavigationController内部以模态方式呈现时,这似乎有效。 Window Layout

答案 1 :(得分:0)

为什么要将所有内容放在main.xib中? 尝试将第二个标签栏移出主窗口xib,然后将其放在customDetailEditViewController中。