UISplitViewController必须是iPad应用程序的根控制器吗?

时间:2010-02-22 17:51:18

标签: ipad uisplitviewcontroller iphone-sdk-3.2

根据Apple关于UISplitViewController(在新的iPad 3.2 SDK中)的文档,看起来他们打算只将它用作应用程序的根控制器。换句话说......就像你不能将UISplitViewController推到UINavigationController上一样,因为显然UINavigationController需要保持拆分视图。

任何人都可以确认这是否是UISplitViewController的真正限制?我希望在我的应用程序中使用我的UINavigationController层次结构中的几个级别的拆分视图,但看起来除非有办法,否则我将无法做到这一点。

谢谢!

5 个答案:

答案 0 :(得分:5)

每当我尝试以模态方式呈现UISplitViewController时,我的应用程序都会崩溃。

答案 1 :(得分:2)

这是一篇很老的帖子,但我觉得帮助我以不同的方式思考是有用的,这就是我解决问题的方法。

我以编程方式创建了splitViewController。然后我用一个数字标记它,并将其作为子视图添加到我当前的视图中。


FirstViewController* firstView = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];    
SecondViewController* secondView = [[[SecondViewController alloc]  initWithNibName:@"SecondViewController" bundle:nil] autorelease];        
UISplitViewController* splitVC = [[UISplitViewController alloc] init];
[splitVC setDelegate:secondView];    
splitVC.viewControllers = [NSArray arrayWithObjects:firstView, secondView, nil];    
splitVC.view.tag = 99;    
[self.view addSubview:splitVC.view];

之后,显示splitView,但为了摆脱它,我必须从视图中删除它,所以我在viewcontrollers之间创建了一个通知。在主视图控制器中,我添加了观察者。 (注意:主视图控制器不是splitViewController或其中一个视图,而是视图控制器加载splitViewController

NSNotificationCenter *splitViewObserver = [NSNotificationCenter defaultCenter];
[splitViewObserver addObserver:self selector:@selector(removeSplitView) name:@"removeSplitView" object:nil];
选择器“removeSplitView”中的

我通过for循环放置当前视图的所有子视图,并搜索带有标记99的UIView类对象,并将其从superview中删除。

NSArray *subviews = [self.view subviews];

for (int i = 0; i < [subviews count]; i++) {
    if ([[subviews objectAtIndex:i] isKindOfClass:[UIView class]]) {
        UIView *tempView = [subviews objectAtIndex:i];
        if (tempView.tag == 99) {
            [[subviews objectAtIndex:i] removeFromSuperview];
        }
    }
}

在firstView中,我有一个名为done的方法,用于发布主ViewController正在观察的通知。

-(IBAction) done:(id)sender {       
    [fileSelectedNotification postNotificationName:@"removeSplitView" object:self];    
}

您还必须在应用中的某个位置创建fileSelectedNotification。我是通过viewDidLoad完成的。它看起来像这样。

fileSelectedNotification = [NSNotificationCenter defaultCenter];

我当然也添加了这个

NSNotiicationCenter *filesSelectedNotification;

到此viewController的.h文件。

因此,当我按下完成按钮(我的应用程序上的一个条形按钮)时,它会从视图中删除splitViewController

工作正常。我从阅读文档中得到了所有这些。

答案 2 :(得分:1)

Apple HIG说你做不到。意味着他们可能阻止你做这件事,所以我怀疑你会让它发挥作用。一些开发者写了自己的

答案 3 :(得分:1)

完全没有。例如,可以在层次结构的根目录中具有选项卡栏控制器,其中每个选项卡都具有拆分视图控制器。

请参阅我的帖子,了解如何将拆分视图控制器改装到标签栏界面:http://markivsblog.blogspot.com/2010/04/retrofitting-ipad-uisplitviewcontroller.html

答案 4 :(得分:0)

仅供参考,我认为这是要走的路:看到类似的question