iOS 7中的UISplitViewController问题(崩溃)

4

我需要在其中一个视图控制器中进行实例化。

UISplitViewController *splitViewController =  [kStoryBoard instantiateViewControllerWithIdentifier:@"splitController"];
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
splitViewController.navigationController.navigationBarHidden = YES;

splitViewController.presentsWithGesture = NO;
UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc]initWithTarget:navigationController.topViewController action:@selector(swipeDetected:)];
swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft|UISwipeGestureRecognizerDirectionRight;

[splitViewController.view addGestureRecognizer:swipeRecognizer];
CGRect frame = splitViewController.view.frame;
frame.origin.x = 0;
frame.size.height -=100;
frame.origin.y +=100;
splitViewController.view.frame = frame;
UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0];
     MasterViewController *masterVC = (MasterViewController*)[masterNavigationController topViewController];
masterVC.currentCategory = [categoriesArray objectAtIndex:sender.tag-1];



self.navigationController.navigationBarHidden = YES;
[self.navigationController setViewControllers:[NSArray arrayWithObject:splitViewController] animated:YES];

我的应用在这一行崩溃了。

   [self.navigationController setViewControllers:[NSArray arrayWithObject:splitViewController] animated:YES];

在iOS 5和iOS 6上运行良好。 仅在iOS 7上会发生崩溃。

这是错误信息:

[UINavigationController _setViewControllers:transition:animated:], /SourceCache/UIKit/UIKit-2903.2/UINavigationController.m:768 2013-10-21 18:51:37.009 TruAirSync[1723:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UISplitViewControllers are not allowed in a navigation controller!'


注意:本文中出现的html标签请保留,不要进行翻译或删除。

我有同样的问题。有人知道任何解决方法吗?而不是使UISplitViewController成为根视图控制器? - atisman
3个回答

2

找到了答案。希望它也能帮助其他人。

我们只需要使用一个视图控制器。

UIViewController *containerVC = [[UIViewController alloc]init];

[containerVC.view setFrame:splitViewController.view.frame]; 
[containerVC.view addSubview:splitViewController.view];
[containerVC addChildViewController:splitViewController];
[splitViewController didMoveToParentViewController:containerVC];
[self.navigationController setViewControllers:[NSArray arrayWithObject:containerVC] animated:YES];

1

只需创建另一个UIViewController,并将您的分割视图控制器的视图添加到其子视图中,然后您就可以在UINavigationController中使用它。

YourContainerController *containerController = [YourContainerController new];
[containerController.view addSubview:splitViewController.view];
[self.navigationController setViewControllers:@[containerController] animated:YES];

0

UISplitViewController 应该是应用程序窗口的根视图。不确定为什么在 iOS 5 和 6 中可以工作。您不能将 UISplitViewController 推入 UINavigationController。

来自苹果公司的 文档:

分割视图控制器必须始终是您创建的任何界面的根。换句话说,您必须始终将 UISplitViewController 对象的视图安装为应用程序窗口的根视图。


我知道那部分。 但是我想知道的是如何使用UInavigationController的setViewControllers属性来使用它。 - Itesh
不可能。它必须是根视图控制器。你可能想尝试一些UISplitViewController的替代品。 - bbarnhart
找到答案了。 我们只需要使用一个视图控制器。UIViewController *containerVC = [[UIViewController alloc]init];[containerVC.view setFrame:splitViewController.view.frame];[containerVC.view addSubview:splitViewController.view]; [containerVC addChildViewController:splitViewController]; [splitViewController didMoveToParentViewController:containerVC];[self.navigationController setViewControllers:[NSArray arrayWithObject:containerVC] animated:YES]; - Itesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接