3

我有一个UINavigationController。在我的层次结构的第二层,我想用一个工具栏显示一个视图控制器,我在其中插入了一个分段控件。通过它,用户可以在我们可以调用A和B的同一页面的两个“视图”之间进行选择(如在日历应用程序中)。如何在不使用标签栏的情况下在UIViewControllers之间切换?

当用户按A段时,必须显示A视图。当用户按下B段时,必须显示B视图。

A和B是复杂的视图,所以我更愿意在称为AViewController和BViewController的两个单独的视图控制器中管理它们。

最初我曾想过要在UITabBarViewController中插入AViewController和BViewController,但是在pushViewController中:animated:official documentation我读到推送的视图控制器“不能是标签栏控制器的实例。”

你知道如何在不使用UITabBarViewController的情况下在AViewController和BViewController之间切换?

非常感谢!

回答

2

你可能想看看UISegmentView,它会给你几个按钮,你可以用它来改变视图内容。

另一种选择是使用信息按钮,在视图之间有一个漂亮的翻转过渡。

第三个选项是让工具栏按钮将您的第二个视图作为模式视图,并在该屏幕上有一个关闭按钮,使其自行解散。

的技术答案

创建包含UISegment视图和2个视图控制器实例变量,AViewControllerBViewController容器视图控制器。同样在你的主视图控制器中,有一个容器视图为子视图设置适当的框架。实例两者在viewDidLoad但只显示当前选中的一个...

-(void)showAppropriateView { 

    if([segment selectedIndex] == A_VIEW_SEGMENT) { 
     [self.containerView addSubView:aViewController.view]; 
     [bViewController.view removeFromSuperView]; 
    } else { 
     [self.containerView addSubView:bViewController.view]; 
     [aViewController.view removeFromSuperView]; 
    } 
} 

调用此方法的UISegmentView变化时。

+0

谢谢您的回答。可能我没有解释清楚我的问题。从图形角度我有一个清晰的想法,但我的问题是技术性的。问题是我有2个视图控制器,AViewController和BViewController,我想在用户点击相应的段时切换它们。就像在日历应用程序中一样,用户可以点击“列表”,“日”和“月”。不使用标签栏控制器,也不使用模态视图控制器。再次感谢。 – Larry 2010-03-05 13:53:00

+0

我更新了一些更多的细节。 – 2010-03-05 14:42:36

+0

谢谢Ben!真的很有帮助。你知道如果做这样的方法查看{Will,Did}出现:AViewController和BViewController是否被调用?这对我来说很重要。我需要一些能够自动完成所有工作的东西,就像标签栏控制器一样...... – Larry 2010-03-05 14:51:09

2

我将作为一个视图的子视图的意见同时添加(称之为rootView),并使用bringSubviewToFront显示它们:

// display view A 
[rootView bringSubviewToFront:AViewController.view]; 

// display view B 
[rootView bringSubviewToFront:BViewController.view]; 
+0

谢谢。但是这样做,viewWillAppear:,viewDidAppear:,viewWillDisappear:和viewDidDisappear:AViewController和BViewController的方法被调用?如果是的话,这是我n EED。谢谢。 – Larry 2010-03-05 13:57:37

+0

我期望如此。但是,如果不是,你可以总是手动调用他们 – pheelicks 2010-03-05 14:01:10

+0

我不想手动调用它们。我需要一些能够自动完成所有工作的东西,就像标签栏控制器一样......无论如何,现在我试试。谢谢。 – Larry 2010-03-05 14:04:58