ios - 如何在整个屏幕上创建透明覆盖,包括事件键盘

标签 ios objective-c uiview uiwindow messageui

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

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

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

当我在这种情况下执行上述代码时(显示消息 View 时),它可以正常工作。问题是,用户无法再与其下方的消息 View 进行交互。我一直在我的 tintView 上将 userinteractionenabled 设置为 NO,但在这种情况下它无助于解决问题。

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

我在最顶层的 UIWindow 中记录了 View ,发现 UIRemoteView(我找不到任何相关信息,但似乎是在 MessageUI.framework 中显示 View 的内容)是 tintView 时未接收到触摸的 View 在它之上。

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

最佳答案

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

但是:将 subview 插入到您不“拥有”的窗口中似乎是一种不好的做法......您最好为此创建自己的窗口..我能问一下您为什么要为键盘着色吗?

编辑:

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

https://gist.github.com/3139219

编辑 2:好吧,这只适用于键盘,但对于模态视图 Controller 会中断,所以回到绘图板......抱歉!

关于ios - 如何在整个屏幕上创建透明覆盖,包括事件键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11535130/

相关文章:

iphone - UIScrollView 未检测到折叠后的触摸

ios - 以编程方式加载时,UIViewController 加载为空

ios - 如何修复 AWSCore (AWS-sdk-ios) 中的 [AWSTask 异常] 崩溃

objective-c - iOS(iPad)如何获取PDF目录(outline)数据?

objective-c - 从核心数据中获取数组

iphone - 使用 NSOperationQueue 在后台线程中执行 drawRect 和 sizeWithFont 会导致应用程序崩溃

ios - FBSDKAccessToken currentAccessToken 登录后未更新

uiview - UIView 上的固定高度约束

ios - 如何使用自动布局垂直堆叠 TableView ?

ios - 将 NSFetchedResultsController 与 UITableView 中的特定部分相关联