【问题标题】:iOS 6 storyboards: modal view is not dismissingiOS 6 故事板:模态视图不会消失
【发布时间】:2012-10-17 15:10:48
【问题描述】:

我正在使用 Xcode 4.5 和 iOS 6。

我正在构建一个使用故事板的通用应用程序。我有一个视图控制器,在导航栏中有一个按钮。当点击按钮时,我使用 segue 将另一个视图控制器呈现为模态。模态视图控制器在其导航栏中有一个取消和一个保存按钮。在情节提要中,模态按钮项与新 Exit 动作上的动作相关联,该动作应该展开到父视图控制器、关闭模态并调用动作处理程序。

这在 iPhone 上运行良好,但我在 iPad 上发现问题。在 iPad 上,当模式全屏显示时,一切正常。当我将模式更改为 Page Sheet 或 Form Sheet(在我的情况下这是所需的行为)时,会调用操作处理程序,但不会自动关闭模式视图控制器。

还有其他人看到过这种行为吗?你有什么措施来解决它吗?

谢谢。

【问题讨论】:

    标签: ios6 uistoryboard uistoryboardsegue xcode-storyboard


    【解决方案1】:

    感谢您提出这个问题,因为我刚刚遇到了同样的问题。我认为这是一个错误,但我还没有向 Apple 提交它。同时,简单的解决方法是在您的unwind: 实现中调用dismissViewController:animated:(即在通过Exit 图标连接到unwind segue 的操作方法中),从而自行关闭模态视图。

    我对这个解决方案的唯一担心是,如果这个 一个错误并且 Apple 最终修复了它,他们的修复会破坏使用此解决方法的任何代码吗?只有时间会证明...

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

    UISplitViewController
        UINavigationController
            MasterViewController
        UINavigationController
            DetailViewController ----> modal segue ----> ThirdViewController
    

    从 ThirdViewController 回到 DetailViewController 的退出 / 展开 segue 演示了该错误 - 调用了 unwind: 实现,但表单视图并未关闭。但是如果我继承 UISplitViewController 并在那里实现unwind:,它工作正常。 (unwind: 实现可以为空;关键是表单视图会自动关闭。)所以显然这是与容器视图控制器有关的问题,您可以通过让容器处理它来解决它。

    查看我的示例项目,上传到https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p561containerViewControllerStoryboard3Bug

    【讨论】:

    • 这对我有用。应该被接受为正确答案。
    【解决方案2】:

    如果模态视图控制器自动关闭,这很酷,但在 Apple 的示例 here 中,他们使用模态转换进行 segue,然后在展开(退出)操作中显式调用dismissViewControllerAnimated:completion: 以将其关闭。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,所以我做了:

      - (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 强制解雇。

      【讨论】:

        【解决方案4】:

        我遇到了类似的问题。我的模态转场不会放松。在浪费了太多时间之后,我发现了问题所在。这是我的错。

        我在目标控制器中有一个写得很糟糕的- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender。没想到我刚刚写了新的 segue,所以它返回了NO。从本质上讲,我的新 segue 被告知不要被其他代码放松。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-21
          • 2012-01-30
          • 2013-11-16
          • 2014-09-12
          • 1970-01-01
          • 2014-11-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多