当不是模态时,展开segue不会忽略自适应弹出窗口

6 objective-c ios ios8 adaptive-ui unwind-segue

iOS 9测试版的更新:Apple可能已针对iOS 9修复此问题.如果您针对iOS 8解决此问题,请确保它在iOS 9上也能正常运行.

在故事板中,我创建了一个popover演示文件segue,用于从按钮呈现导航和视图控制器,以及创建展开segue.

在纵向方向上,模态(全屏)演示按预期展开/解除.

在横向方向上,展开segue也会被调用,但是弹出窗口不会被自动解除.

我错过了挂钩的东西吗?我是否必须自己解雇popover演示文稿?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)__unused sender
{
    if ([[segue identifier] isEqualToString:@"showSelectBookChapter"])
    {
        UINavigationController *navigationController = segue.destinationViewController;

        if ([navigationController.topViewController isKindOfClass:[BIBLESelectViewController class]])
        {
            BIBLESelectViewController *selectViewController = (BIBLESelectViewController *)navigationController.topViewController;
            selectViewController.initialBookChapterVerse = self.bookChapterVerse;
        }
    }
}

- (IBAction)unwindToBIBLEChapterViewController:(UIStoryboardSegue *)segue
{
    if ([segue.identifier isEqualToString:@"unwindToBIBLEChapterViewController"]) {
        if ([segue.sourceViewController isKindOfClass:[BIBLESelectViewController class]])
        {
            BIBLESelectViewController *sourceViewController = (BIBLESelectViewController *)segue.sourceViewController;
            self.bookChapterVerse = sourceViewController.selectedBookChapterVerse;
            [self.tableView reloadData];

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

故事板场景和segues 更新: 在查看gabbler的示例代码之后,我已经将问题缩小到popover在单视图应用程序中解除罚款,但不是在Master-Detail应用程序中.

更新2: 这是层次结构的样子(为简单起见,省略了导航控制器),回答了Luis问的问题:

  • 拆分视图控制器
    • 主视图控制器
    • 细节视图控制器
      • 章节视图控制器(模态页面表)
        • 选择视图控制器(解开章节视图控制器的有问题的弹出窗口,但不解除)

正如我在上一次更新中提到的,我创建了一个新的主/详细模板,并直接从详细视图中的(按钮)中显示了一个弹出窗口.它不会被解雇.

mbe*_*aty 11

我也遇到了这个问题.我从主视图控制器(UISplitViewController)以模态方式(作为表单)呈现视图控制器.这个问题只发生在iPad上(也可能是横向模式下的iPhone 6+,但我没有检查).我最后在我的展开动作方法(使用Swift)中执行了以下操作,并且它运行良好.

if !segue.sourceViewController.isBeingDismissed() {
    segue.sourceViewController.dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)