Ios6 iOS 6情节串连板:模态视图未关闭

Ios6 iOS 6情节串连板:模态视图未关闭,ios6,uistoryboard,uistoryboardsegue,xcode-storyboard,Ios6,Uistoryboard,Uistoryboardsegue,Xcode Storyboard,我使用的是Xcode 4.5和iOS 6 我正在构建一个使用故事板的通用应用程序。我有一个视图控制器,在导航栏中有一个按钮。当点击按钮时,我正在使用segue将另一个视图控制器显示为模态。模态视图控制器的导航栏中有一个“取消”和一个“保存”按钮。在情节提要中,模式按钮项链接到新的退出操作上的操作,该操作应展开到父视图控制器,取消模式,并调用操作处理程序 这在iPhone上运行良好,但我在iPad上看到了问题。在iPad上,当modal以全屏显示时,一切正常。当我将模式更改为页面工作表或表单工作表

我使用的是Xcode 4.5和iOS 6

我正在构建一个使用故事板的通用应用程序。我有一个视图控制器,在导航栏中有一个按钮。当点击按钮时,我正在使用segue将另一个视图控制器显示为模态。模态视图控制器的导航栏中有一个“取消”和一个“保存”按钮。在情节提要中,模式按钮项链接到新的退出操作上的操作,该操作应展开到父视图控制器,取消模式,并调用操作处理程序

这在iPhone上运行良好,但我在iPad上看到了问题。在iPad上,当modal以全屏显示时,一切正常。当我将模式更改为页面工作表或表单工作表(在我的案例中,这是所需的行为)时,会调用操作处理程序,但不会自动取消模式视图控制器

还有人见过这种行为吗?你做了什么来修复它吗


多谢各位

谢谢你问我这个问题,因为我刚刚遇到了同样的问题。我认为这是一个bug,但我还没有向苹果公司提交。同时,简单的解决方法是在
unwind:
实现中调用
dismissViewController:animated:
(即,在通过退出图标连接到unwind segue的操作方法中),从而降低模式视图的亮度

对于这个解决方案,我唯一担心的是,如果这是一个bug,苹果最终会修复它,那么他们的修复程序是否会破坏使用此解决方案的任何代码?只有时间会告诉我们

稍后编辑:我发现了一个更好的解决方法。子类化要展开到的类的父(容器)类,并在那里实现展开。例如,在我的应用程序中,情况如下所示:

UISplitViewController
    UINavigationController
        MasterViewController
    UINavigationController
        DetailViewController ----> modal segue ----> ThirdViewController
从ThirdViewController返回DetailViewController的exit/unwind segue演示了该错误-调用了
unwind:
实现,但表单视图未被取消。但是,如果我将UISplitViewController子类化,并在那里实现
展开:
,它就可以正常工作。(
展开:
实现可以是空的;关键是表单视图会自动关闭。)因此,显然这是一个与容器视图控制器有关的问题,您可以通过让容器处理它来解决


查看我的示例项目,如果模态视图控制器被自动解除,则上传至

酷,但在苹果的示例中,他们对segue使用模态转换,但随后在解除(退出)操作中显式调用dismissViewControllerAnimated:completion:解除它。

我也有同样的问题,所以我所做的是:

- (IBAction)closeSalesJournal:(UIStoryboardSegue *)segue
{
    // Unwind Segue
    NSLog(@"Closed Sales journal VC");

    // For iPad, need to dismiss the view controller manually
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
}

那样的话,我肯定会离开iPhone的标准方式,用iPad强制解雇。

我也遇到了类似的问题。我的情态音乐无法放松。在浪费了太多的时间之后,我解决了这个问题。是我的错


我有一个写得很差的
-(BOOL)可以在目标控制器中使用sender:(id)sender执行来自ViewController:(UIViewController*)的WindSegueAction:(SEL)操作。它没有预料到我刚刚写的新segue,所以它返回了
NO
。本质上,我的新segue被其他代码告知不要放松。

这对我来说很有效。应该被接受为正确答案。