2010-02-22 84 views
3

根据苹果有关UISplitViewController的文档(在新的iPad 3.2 SDK中),它看起来像他们打算让您只将它用作应用程序的根控制器。换句话说......它接缝就像你不能将UISplitViewController放到UINavigationController上,因为显然UINavigationController需要保持分割视图。UISplitViewController是否必须是iPad应用程序的根控制器?

任何人都可以确认这是否是UISplitViewController的真正限制吗?我希望能够在我的应用程序中使用我的应用程序中的分割视图,在我的UINavigationController层次结构中深入几层,但看起来我不能这样做,除非有办法。

谢谢!

回答

5

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

+0

您将得到一个未捕获的异常:“应用程序尝试以模态方式呈现分割视图控制器”[原文] – 2010-04-17 16:32:02

1

苹果HIG说你不能。意味着他们可能阻止了你这样做,所以我怀疑你会得到它的工作。一些开发者已经自己编写了

1

完全没有。例如,可以在层次结构的根部有一个标签栏控制器,其中每个标签都有一个分割视图控制器。

见我对改造拆分视图控制器标签栏接口柱:http://markivsblog.blogspot.com/2010/04/retrofitting-ipad-uisplitviewcontroller.html

+0

您可以在技术上做到这一点,但会遇到错误 - 主要是当用户更改其他选项卡上的应用程序方向并返回拆分视图选项卡。 – Jason 2010-06-30 13:41:00

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视图控制器)中选择“removeSplitView”我把我所有的当前视图的子视图的

NSNotificationCenter *splitViewObserver = [NSNotificationCenter defaultCenter]; 
[splitViewObserver addObserver:self selector:@selector(removeSplitView) name:@"removeSplitView" object:nil]; 

通过for循环并使用标签99搜索UIView类对象并将其从超级视图中移除。

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我称做了方法的帖子,主要是ViewController观察通知。

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

您还必须在应用程序的某处创建fileSelectedNotification。我通过viewDidLoad做到了这一点。它看起来像这样。

fileSelectedNotification = [NSNotificationCenter defaultCenter]; 

当然我也添加了这个

NSNotiicationCenter *filesSelectedNotification; 

这个viewController的.h文件。

因此,当我按下完成按钮(这是我的应用程序栏按钮)时,它将从视图中删除splitViewController

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

0

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

相关问题