如何在整个屏幕上创建一个透明覆盖,包括主动键盘
我已经能够凌驾于所有其他意见,包括键盘半透明的看法,使用此代码着色屏幕:如何在整个屏幕上创建一个透明覆盖,包括主动键盘
int count = [[[UIApplication sharedApplication]windows]count];
[[[UIApplication sharedApplication] windows] objectAtIndex:count-1]addSubview:tintView];
现在我遇到了一个问题。我的应用程序使用MessageUI.framework来显示一个MFMessageComposeViewController,它允许用户发送文本消息。这是我遇到问题的地方。
当我在这种情况下(当消息视图显示时)执行上述代码时,它可以正常工作。问题是,用户不能再与它下面的消息视图进行交互。我一直在我的tintView上将userinteractionenabled设置为NO,但在这种情况下,它不能解决问题。
但是,将色调视图设置为隐藏,但确实允许进行交互。通过更改此属性可以使消息视图与之交互。不过,显然我想让tintView可见。
我NSLogged在最顶层的UIWindow的意见,并发现UIRemoteView(我可以找到任何信息,但似乎是什么显示在MessageUI.framework中的意见)是视图没有收到触摸时tintView高于它。
即使显示了另一个UIView,我如何允许与MFMessageComposeViewController进行交互。 Userinteractionenabled在这种情况下不起作用,但将视图设置为隐藏(这不是我想要的)。
我认为你可以在你的色彩查看覆盖-hitTest:
返回nil
但是:这似乎是不好的做法,子视图插入到你没有“自己的”窗口......你可能最好创建自己的这个窗口..我可以问你为什么要着色键盘?
编辑:
我写了一些代码,演示了这种工作:
https://gist.github.com/3139219
编辑2:嗯,这适用于只是键盘,但模态视图控制器休息,所以回画板..对不起!
我想要改变它的外观。它实际上包含一个包含AVCaptureVideoPreviewLayer的视图以显示相机,但我没有提到这是为了简化问题。有没有一种方法可以在键盘上创建我自己的UIWindow(以及所有其他视图 - 我实际上正在调整整个屏幕)?我是新来的,所以我不知道如何。 – jadengeller 2012-07-18 06:17:50
在UIView上重写hitTest不能解决问题。除非不绘制它,否则将确切地知道将视图设置为隐藏是有用的,因为将其设置为隐藏确实解决了问题(但它不可见)。 – jadengeller 2012-07-18 06:21:42
你可以创建一个窗口 - 他们的工作大部分是视图:'[[UIWindow alloc] initWithFrame:]',但我认为它是不鼓励的......但对于你的情况,也许它是确定的。 (我之前做过这个帮忙) – nielsbot 2012-07-18 07:13:52
您是否尝试过'[tintView becomeFirstResponder];' – Scar 2012-07-18 06:08:16
我希望tintView忽略用户输入并允许它下面的视图来处理它们。这工作正常,除非我尝试使用MessageUI.framework。 所以,不,我没有尝试,因为我不想tintView来响应输入。但是我尝试了“[tintView resignFirstResponder]”和“[[[[[[[[UIApplication sharedApplication] windows] objectAtIndex:0] subviews] objectAtIndex:0] becomeFirstResponder]” – jadengeller 2012-07-18 06:13:00
对此的任何结果?这仍然是我看到的问题。 – NSProgrammer 2014-02-28 18:34:53