我仍在尝试找到一个理论上非常简单的任务的解决方案,从UIViewController到Split View Controller。 (为什么苹果这么困难)。
我现在处于一个阶段,我现在将SplitViewController放入自己的故事板中。 当用户选择单个UIView控制器上的按钮时,我调用以下代码:
UISplitViewController *splitVC = [[UIStoryboard storyboardWithName:@"SplitStoryBoard" bundle:nil] instantiateViewController];
[self presentViewController:splitVC animated:YES completion:nil];
所以我想用splitview控制器加载故事板。 但这也会因“应用程序试图以模态方式呈现分割视图控制器”而崩溃。
我没有在代码中指定任何“模态”操作。
有没有解决方法如何做到这一点?
答案 0 :(得分:3)
UISplitViewController
必须始终是根视图控制器,并且不能以模态方式呈现。请参阅Apple docs,其中包含:
拆分视图控制器必须始终是您所有接口的根 创建。换句话说,您必须始终从a安装视图 UISplitViewController对象作为应用程序的根视图 窗口。然后可以包含拆分视图界面的窗格 导航控制器,标签栏控制器或任何其他类型的视图 你需要控制器来实现你的界面。拆分视图 控制器不能以模态方式呈现。
答案 1 :(得分:2)
您可以使用splitViewController作为TabViewController的视图,但splitViewController不能是传统意义上的模态控制器。要从UIViewController转换到SplitViewController,请使用以下代码:
- (IBAction)setupTapped:(id)sender {
static NSString *tabViewControllerIdentifier = @"SetupViewController";
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:tabViewControllerIdentifier];
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UIViewController *currentController = app.window.rootViewController;
app.window.rootViewController = controller;
app.window.rootViewController = currentController;
[UIView transitionWithView:self.navigationController.view.window
duration:0.75
options:UIViewAnimationOptionTransitionFlipFromRight
animations:^{
app.window.rootViewController = controller;
}
completion:nil];
}
那将在控制器之间转换。您可以更改动画类型以适合您的目的。这是使用options参数设置的;目前正在显示UIViewAnimationOptionTransitionFlipFromRight。
答案 2 :(得分:1)
这是一个很老的问题。但是我在我的应用程序中使用下面的代码工作了,我认为这是更好的解决方案。
[self addChildViewController:<# Your Split VC #>];
[<# Your Split VC #>.view willMoveToSuperview:self.view];
<# Your Split VC #>.view.frame = self.view.frame;
[self.view addSubview:<# Your Split VC #>.view];
[<# Your Split VC #>.view didMoveToSuperview];
我们的想法是采用视图控制器(Parent)并将拆分视图控制器添加为其子视图。像对待任何其他控制器一样,将模型segue执行到父级。
嗯,我不确定,但是从iOS8开始,SplitViewController变得更好了,除了根视图控制器之外,还可以在其他地方使用它。
干杯!
答案 3 :(得分:0)
如果您在故事板中创建了UISplitViewController
,并且在拆分视图之前添加了主视图,则可以使用performSegueWithIdentifier
触发主视图和拆分视图之间的seque。
要修复标题中的错误,您需要覆盖UISplitViewController
// Swift
override func awakeFromNib() {
let app = UIApplication.sharedApplication().delegate as AppDelegate
let currentController = app.window!.rootViewController;
app.window!.rootViewController = self;
}
答案 4 :(得分:0)