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!'

4

3 回答 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];
于 2014-02-14T06:40:49.127 回答
1

只需创建另一个 UIViewController 并将您的 splitviewcontroller 的视图添加到它的子视图中,就可以在 UINavigationController 中使用它。

YourContainerController *containerController = [YourContainerController new];
[containerController.view addSubview:splitViewController.view];
[self.navigationController setViewControllers:@[containerController] animated:YES];
于 2014-02-04T15:43:21.033 回答
0

UISplitViewController 应该是应用程序窗口的根视图。不知道为什么这在 iOS 5 和 6 中对你有用。你不能将 UISplitViewController 推送到 UINavigationController 中。

来自 Apple 的文档:

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

于 2013-10-21T13:38:31.977 回答