如何在整个屏幕上创建透明覆盖,包括活动键盘



我已经能够将半透明视图放在包括键盘在内的所有其他视图之上,使用以下代码对屏幕进行着色:

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

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

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

但是,将色调视图隐藏为"是"确实允许交互。通过更改此属性,可以与消息视图进行交互。显然,我希望tintView是可见的。

我在最上面的UIWindow中记录了视图,发现UIRemoteView(我找不到任何信息,但似乎是在MessageUI.framework中显示视图的)是当tintView在其上方时没有接收到触摸的视图。

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

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

但是:在你不"拥有"的窗口中插入子视图似乎是一种糟糕的做法。。。您最好为此创建自己的窗口。。我能问一下你为什么要给键盘上色吗?

编辑:

我写了一些代码来证明这一点:

https://gist.github.com/3139219

编辑2:好吧,这只适用于键盘,但对模式视图控制器来说是坏的,所以回到绘图板上。。很抱歉

最新更新