ios - Unwind segue 在非模态时不会关闭自适应弹出窗口呈现

标签 ios objective-c ios8 unwind-segue adaptive-ui

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

在 Storyboard 中,我创建了一个 popover 演示 segue 以通过按钮呈现导航和 View Controller ,并创建了一个 unwind segue。

在纵向模式下,模态(全屏)显示如预期的那样展开/关闭。

在横向模式下,也会调用 unwind segue,但是弹出窗口不会自动关闭。

我是否错过了一些连接?我必须自己关闭弹出窗口显示吗?

- (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];

        }
    }
}

Storyboard scenes and segues 更新: 在查看了 gabbler 的示例代码后,我将问题缩小为在单 View 应用程序中弹出窗口关闭正常,但在主从应用程序中没有。

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

  • Split View Controller
    • 主视图 Controller
    • 细节 View Controller
      • 章节 View Controller (模态页面表)
        • 选择 View Controller (有问题的弹出窗口展开到章节 View Controller ,但不会关闭)

正如我在之前的更新中提到的,我创建了一个新的主/细节模板,并直接从细节 View (中的一个按钮)简单地呈现了一个弹出框。它不会解散。

最佳答案

我也遇到了这个问题。我从主视图 Controller (UISplitViewController) 模态地(作为表单)呈现一个 View Controller 。这个问题只出现在 iPad 上(可能 iPhone 6+ 横向模式也有,但我没有检查)。我最终在我的展开操作方法中执行了以下操作(使用 Swift),并且效果很好。

if !segue.sourceViewController.isBeingDismissed() {
    segue.sourceViewController.dismissViewControllerAnimated(true, completion: nil)
}

关于ios - Unwind segue 在非模态时不会关闭自适应弹出窗口呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247727/

相关文章:

ios - 每次更改时打印 UINavigationController 堆栈的值

ios - 一段时间后,从Super Layer中删除会使应用程序崩溃

ios - 后台获取和本地通知

swift - 需要说明旋转 AV 摄像机的步骤

ios - Enterprise Distribution 在 Swift App 中与 iOS8 的配合不佳

iphone - 如果我的应用程序不支持iPhone 6,该怎么办?

ios - 如何在 Swift 中调整图像大小以响应 IBAction?

ios - 如何从 MPRemoteCommandCenter 禁用所有 MPRemoteCommand 对象

iphone - Objective c 无法定义宏

ios - Objective-C - 无法通过 Firebase 动态链接打开我的应用程序