【问题标题】:iPad - topmost modal view controller won't dismiss when there are multipleiPad - 当有多个时,最顶层的模态视图控制器不会关闭
【发布时间】:2010-10-21 16:51:59
【问题描述】:

我正在开发双 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 应该返回 到根

【问题讨论】:

  • 我注意到一件微妙的事情,在 iPad 上,ViewDidAppear 永远不会在第二个模式上触发。对于 iPhone,它可以很好地触发......想知道 iPad 版本的应用程序会发生什么。
  • 刚刚制作了一个快速复制应用程序,并在 iPad 上使用作为 UISplitViewController 的根控制器执行 2 个模态,它工作得很好。我的应用程序中一定有什么东西破坏了它。

标签: iphone objective-c ipad xamarin.ios modalviewcontroller


【解决方案1】:

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

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

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

【讨论】:

  • 我是从父控制器调用的,但我尝试按照您的建议从模态控制器调用它并得到相同的结果。在我得到第二个模态视图之前似乎没有问题。出于某种原因,只有 iPad...
  • 为什么你需要第二个模态视图控制器?我不确定它会在应用商店中流行。为什么不在模态控制器的视图上推送另一个视图?
  • 第一个模式是登录屏幕。第二个模式是“首次运行”屏幕,您可以在其中输入服务器的 URL,该 URL 应该只出现一次。要详细说明原因,我将不得不透露更多关于 out app 的信息。我将在一个示例项目中重现它。 另外:我不认为在登录模式上使用 UINavigationController 也行不通,因为用户不应该能够退出并且我们不想要导航栏。
  • 作为旁注;您可以使用 navigationController.NavigationBarHidden = true; 从 UINavigationController 隐藏导航栏
  • 是的,卢克所说的应该有效。你可以把它藏起来,但它仍然在那里。老实说,这可能是最有效的方法。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-04-21
    • 2011-09-27
    • 1970-01-01
    • 2014-09-10
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多