我有一个相对简单的问题,我似乎无法弄清楚。
我在一个 UIViewController (myViewController) 的内部,它嵌入在 UIViewController 层次结构中的某个地方(在父 UITabBarController 下方的某个地方)。
myViewController 有一个按钮。当按下该按钮时,我想用黑色、半透明、模态 UIViewController (myModalViewController) 覆盖整个屏幕(包括来自父 UITabBarController 的所有粘液),上面还有其他粘液。
如果我只是打电话
[myViewController presentViewController:myModalViewController..]
一旦过渡结束,myViewController 的视觉效果就会消失,从而破坏了半透明覆盖的点。
如果我将 myModalViewController 设置为 myViewController 的子视图控制器,并将 myModalViewController.view 添加为 myViewController.view 的子视图,则带有半透明黑色背景的模态视图控制器会出现在 UITabBarController 的所有按钮下方。这很糟糕,因为我希望覆盖整个屏幕。
所以,相反,我在层次结构中寻找最顶层的视图控制器,并添加 myModalViewController 作为它的子级:
UIViewController* root = myViewController;
while (root.parentViewController) {
root = root.parentViewController;
}
[root addChildViewController:myModalViewController];
[root.view addSubview:myModalViewController.view];
如果这是处理这种情况的正确方法?看起来很笨拙。
另外,如何使 myModalViewController 以模态方式运行并吞下所有触摸手势,以使其下方的所有 UI 都不响应触摸?现在它确实如此,我所有修复它的尝试都失败了。此外,myModalViewController 和其中的所有 UIView 似乎都没有收到任何触摸通知。