ios 7 中的 UisplitViewController 问题(崩溃)
Posted
技术标签:
【中文标题】ios 7 中的 UisplitViewController 问题(崩溃)【英文标题】:UisplitViewController issue in ios 7(crash) 【发布时间】:2013-10-21 13:22:59 【问题描述】:我必须在其中一个视图控制器中进行实例化。
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!'
【问题讨论】:
我也有同样的问题。在不将 UISplitViewController 设为根视图控制器的情况下,有谁知道任何解决方法? 【参考方案1】:找到答案。 希望它也能帮助其他人。
我们只需要使用一个视图控制器。
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];
【讨论】:
【参考方案2】:只需创建另一个 UIViewController 并将 splitviewcontroller 的视图添加到它的子视图中即可,而不是在 UINavigationController 中使用它。
YourContainerController *containerController = [YourContainerController new];
[containerController.view addSubview:splitViewController.view];
[self.navigationController setViewControllers:@[containerController] animated:YES];
【讨论】:
【参考方案3】:UISplitViewController 应该是应用程序窗口的根视图。不知道为什么这在 iOS 5 和 6 中对你有用。你不能将 UISplitViewController 推送到 UINavigationController。
来自 Apple 的documentation:
拆分视图控制器必须始终是您的任何界面的根 创造。换句话说,您必须始终从 UISplitViewController 对象作为应用程序的根视图 窗口。
【讨论】:
我知道那部分。但我想知道的是我们如何使用 UInavigationController 使用 setViewControllers 属性。 不可能。它必须是根视图控制器。您可能想尝试一些 UISplitViewController 替代品。 找到了答案。我们只需要使用一个视图控制器。 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] 动画:YES];以上是关于ios 7 中的 UisplitViewController 问题(崩溃)的主要内容,如果未能解决你的问题,请参考以下文章
iOS 7 中的 MultipeerConnectivityFramework
容器覆盖 UITableView - iOS 7 中的 SearchBar / SearchDisplayController