首页 文章

“应用程序试图以模态方式呈现拆分视图控制器”

提问于
浏览
6

我仍在尝试找到理论上非常简单的任务的解决方案,从UIViewController到Split View Controller . (为什么苹果这么难吃) .

我现在处于一个阶段,我现在将SplitViewController放入自己的故事板中 . 当用户选择单个UIView控制器上的按钮时,我调用以下代码:

UISplitViewController *splitVC = [[UIStoryboard storyboardWithName:@"SplitStoryBoard" bundle:nil] instantiateViewController];
    [self presentViewController:splitVC animated:YES completion:nil];

所以我想用splitview控制器加载故事板 . 但这也与“应用程序试图以模态方式呈现拆分视图控制器”崩溃

我没有在代码中指定任何“模态”操作 .

有没有解决方法怎么做?

5 回答

  • 0

    如果您在故事板中创建了 UISplitViewController ,并且在拆分视图之前添加了主视图,则可以使用 performSegueWithIdentifier 在主视图和拆分视图之间触发seque . 要修复 Headers 中的错误,您需要覆盖 UISplitViewController 中的一个方法

    // Swift
    override func awakeFromNib() {
        let app = UIApplication.sharedApplication().delegate as AppDelegate
    
        let currentController = app.window!.rootViewController;
        app.window!.rootViewController = self;
    }
    
  • 0

    是的,可以从UIView传递到UISplitView . 你必须使用自定义segue .

    阅读此链接(从日语翻译)

    UIViewController to UISplitViewController

  • 2

    UISplitViewController 必须始终是根视图控制器,并且不能以模态方式呈现 . 见Apple docs,说:

    拆分视图控制器必须始终是您创建的任何接口的根 . 换句话说,您必须始终从UISplitViewController对象安装视图作为应用程序窗口的根视图 . 然后,拆分视图界面的窗格可能包含导航控制器,标签栏控制器或实现界面所需的任何其他类型的视图控制器 . 拆分视图控制器无法以模态方式显示 .

  • 3

    您可以使用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 .

  • 0

    这是一个很老的问题 . 但是我在我的应用程序中使用下面的代码工作,我认为这是更好的解决方案 .

    [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得到了很多,它应该可以在除了root视图控制器以外的地方使用它 .

    干杯!

相关问题