根据Apple关于UISplitViewController(在新的iPad 3.2 SDK中)的文档,看起来他们打算只将它用作应用程序的根控制器。换句话说......就像你不能将UISplitViewController推到UINavigationController上一样,因为显然UINavigationController需要保持拆分视图。
任何人都可以确认这是否是UISplitViewController的真正限制?我希望在我的应用程序中使用我的UINavigationController层次结构中的几个级别的拆分视图,但看起来除非有办法,否则我将无法做到这一点。
谢谢!
答案 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。