从SubView呈现模态ViewController

时间:2011-06-24 17:49:36

标签: ios objective-c modalviewcontroller

我试图从视图控制器B呈现模态视图控制器C.B的视图不覆盖整个屏幕,并且是另一个视图控制器的子视图,A。当我尝试呈现全屏模式时我看到了什么是模态覆盖整个屏幕,但当我点击屏幕中的某些位置时,控件将“传递”到A的视图。

我可以通过某种授权从A中呈现模态来绕过这一点,但我不知道为什么会发生这种情况!毕竟,如果你有一个标签栏控制器来管理你的一个视图,并且你试图呈现一个模态视图,它就可以完全覆盖整个屏幕。幕后是否有一些魔力?

3 个答案:

答案 0 :(得分:10)

我认为没有关于如何实现模式的官方文档,但任何视图都可以获取UIWindowUIApplication并在rootViewController属性上调用-presentModal ....这将使你的模态全屏幕的影响。我确信还有其他方法可以达到同样的效果。

[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:myModalVC animated:YES];

在这种情况下,您需要使用addSubview:和bringSubviewToFront:为所有视图控制器实现自己的“模态”方法。我在一个较大的项目中完成了这项工作,我希望从模态视图中获得一些不同的行为。

答案 1 :(得分:2)

这对我有用:

UIViewController* vc = [[[UIViewController alloc] init] autorelease];
UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView* topView = [[keyWindow subviews] objectAtIndex:[[keyWindow subviews] count] - 1];
vc.view = topView;

[vc presentModelViewController...

基本上,您创建一个新的UIViewController并将其附加到主窗口的最顶层视图(这是用户当前看到的视图)。

答案 2 :(得分:1)

简单但不确定接受度和效率。这就是我使用的。

  1. 将所有视图控制器嵌入到rootView下面的mainView中。
  2. 将任何模态视图添加到rootView,同时禁用mainView的userInteractionEnabled标志。模态视图应添加到rootView而不是mainView
  3. 完成后,重新启用mainView的用户交互。
  4. 希望这会有所帮助......