如何使用另一个Storyboard中的一个替换NavController中的视图并获得动画TRANSITION?

时间:2014-02-27 21:13:02

标签: ios view uisplitviewcontroller uistoryboardsegue

在iPad SplitView应用程序中,Master是一个表,选择Master行会更改Detail窗格(有点像Settings)。我已经有一段时间了。但设计变得拥挤,我正在拆分故事板,将每个详细信息场景放在自己的故事板中。

现在我可以加载详细故事板并为他们构建一个合成的Segue而没有任何问题。后:

destVC = [otherStoryBoard instantiateViewControllerWithIdentifier:VC_IDENTIFIER];

我调用此方法(它在自定义的UISplitViewController实例中也是SV委托):

- (void) segueToVC: (UIViewController*) destVC fromSender: (id) sender
{
    if (destVC) {
        // Let destVC approve before proceeding
        if ([destVC shouldPerformSegueWithIdentifier:SEGUE_ID sender:sender]) {

            // get current DetailVC from the split view
            UINavigationController* detailVC =
                (UINavigationController*)[self.viewControllers lastObject];  

            // Carry any Popover button into the destination viewcontroller
            destVC.navigationItem.leftBarButtonItem = self.rootPopoverButtonItem;

            // setup a synthetic Segue to accomplish the transfer
            UIStoryboardSegue* aSegue = [UIStoryboardSegue segueWithIdentifier:SEGUE_ID
                 source: detailVC.topViewController
                 destination:destVC
                 performHandler:^(void) {
                     // Replace the Nav Stack - but without transition
                     detailVC.viewControllers = @[destVC];
                 }];

            // give destination VC a chance to do any setup
            [destVC prepareForSegue:aSegue sender:sender];

            // Execute the segue
            [aSegue perform];
        }
    }
}

它似乎可靠地工作,但它不提供任何过渡动画。我已经尝试在segue performHandler中更改为这一行:

detailVC.topViewController.navigationController pushViewController:destVC animated:YES];

但是(正如预期的那样)它会推动现有的导航堆栈,而不是像我需要的那样更换它。我也试过这个:

[detailVC.topViewController presentViewController:destVC animated:YES completion:^{}]; 

这确实进行了模态转换,但它取代了整个SplitView,而不仅仅是替换了Detail端。 (它在第二次调用后也会生成“VC不在视图层次结构中”异常)。

我想我可以建立自己的过渡动画,但我觉得我错过了一些更明显的东西。建议?谢谢!

0 个答案:

没有答案