iPad - 最顶层的模态视图控制器在有多个时不会被忽略

时间:2010-10-21 16:52:00

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

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

我遇到的问题只出在iPad上:

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

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

为什么这不适用于iPad的任何想法?

在所有情况下,我从父控制器调用PresentModalViewController和DismissModalViewControllerAnimated来处理其子模态控制器。

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

更新,以下内容可能会使其更清晰:

  • Root =>模态A =>莫代尔B
  • 解雇模态B应该返回 到模态A
  • 解雇模态A应该返回 到根

2 个答案:

答案 0 :(得分:1)

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

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

如果没有看到你试图呈现和解散控制器的方式,很难真正诊断问题,但这应该有效。显示新视图后,您不需要从父控制器执行任何操作...

答案 1 :(得分:1)

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

  1. 第一个模态具有默认的ModalPresentationStyle
  2. 第二个模态有UIModalPresentationStyle.PageSheet
  3. 我的第二个模态显示在第一个模式的ViewDidAppear中。出于某种原因,我需要从BeginInvokeOnMainThread调用PresentModalViewController。 (MonoTouch中的一个单行)这是我从Windows开发和消息泵中学到的一个技巧。我见过iPhone开发者使用计时器做类似的变通办法 - 这样做要好得多。
  4. 如果我们无法通过应用商店获取此信息,我会回复。但就目前而言,这对我们来说是一个很好的解决方案。