5

我已经能够在所有其他视图(包括键盘)之上放置一个半透明视图,以使用以下代码为屏幕着色:

int count = [[[UIApplication sharedApplication]windows]count];
[[[UIApplication sharedApplication] windows] objectAtIndex:count-1]addSubview:tintView];

现在我遇到了一个问题。我的应用程序使用 MessageUI.framework 来显示一个 MFMessageComposeViewController,它允许用户发送文本消息。这是我遇到问题的地方。

当我在这种情况下执行上述代码时(显示消息视图时),它可以正常工作。问题是,用户不能再与它下面的消息视图交互。我一直在我的 tintView 上将 userinteractionenabled 设置为 NO,但在这种情况下,它对问题没有帮助。

但是,将 tint view hidden 设置为 YES 确实允许交互。通过更改此属性可以与消息视图进行交互。不过,显然我希望 tintView 可见。

我在最顶层的 UIWindow 中对视图进行 NSLogged 处理,发现 UIRemoteView(我找不到任何相关信息,但似乎是在 MessageUI.framework 中显示视图的内容)是当 tintView 位于其上方时未接收到触摸的视图。

我如何允许与 MFMessageComposeViewController 交互,即使它上面显示了另一个 UIView。Userinteractionenabled 在这种情况下不起作用,但是将视图设置为隐藏(这不是我想要的)可以。

4

1 回答 1

6

我认为您可以-hitTest:在色调视图中覆盖以返回nil

但是:将子视图插入到您不“拥有”的窗口中似乎是一种不好的做法……您最好为此创建自己的窗口。请问您为什么要为键盘着色?

编辑:

我写了一些代码来演示这个工作:

https://gist.github.com/3139219

编辑 2:这仅适用于键盘,但对于模式视图控制器会中断,所以回到绘图板.. 抱歉!

于 2012-07-18T06:14:27.293 回答