2

我正在开发双 iPad/iPhone 应用程序。

我遇到的问题仅发生在 iPad 上:

  • 根视图控制器在 iPad 上是 UISplitViewController,在 iPhone 上是 UITabBarController
  • 模态 UIViewController 可以出现在根控制器上
  • 模态 UIViewController 可以出现在之前的模态控制器之上
  • 在 iPad 上,模态控制器使用 UIModalPresentationStyle.PageSheet

一切正常,除了从 iPad 上解除最顶层的模态控制器——该方法被调用,但模态视图控制器不会被解除。我通过从前一个模态控制器调用 DismissModalViewControllerAnimated 来解散。

任何想法为什么这不能在 iPad 上工作?

在所有情况下,我从父控制器调用 PresentModalViewController 和 DismissModalViewControllerAnimated 来工作它的子模态控制器。

我正在使用 MonoTouch(您可以通过我的方法外壳来判断),但这可能无关紧要。我也可以在 Obj-C 中回答。

更新,以下可能会使它应该做的更清楚:

  • 根 => 模态 A => 模态 B
  • 关闭模态 B 应该只返回模态 A
  • 关闭模态 A 应该只返回到 Root
4

2 回答 2

1

你确定你在否定正确的观点吗?在模态视图中,假设您想通过单击按钮来关闭视图。在该按钮的方法中,您要调用 DismissModalViewControllerAnimated 方法。说啊

[self dismissModalViewControllerAnimated:YES];
  • 从根目录呈现模态窗口
  • 完成后,从模态视图的控制器中关闭视图。

如果不查看您如何尝试呈现和关闭控制器,就很难真正诊断出问题,但这应该可以。显示新视图后,您不需要从父控制器执行任何操作...

于 2010-10-21T18:49:15.147 回答
1

找到了解决方法。必须满足所有这些条件才能修复它:

  1. 第一个模态具有默认的 ModalPresentationStyle
  2. 第二个模态有 UIModalPresentationStyle.PageSheet
  3. 我的第二个模态显示在第一个的 ViewDidAppear 中。出于某种原因,我需要从 BeginInvokeOnMainThread 调用 PresentModalViewController。(MonoTouch 中的单行代码)这是我从 Windows 开发和消息泵中学到的技巧。我已经看到 iPhone 开发人员使用计时器做了类似的解决方法——这要好得多。

如果我们无法通过应用商店获取此内容,我会回帖。但就目前而言,这对我们来说是一个很好的解决方案。

于 2010-10-22T22:18:43.317 回答