【发布时间】:2017-01-10 00:12:57
【问题描述】:
我需要一个始终位于顶部的视图(用于抖动应用程序)。在大多数情况下它工作得很好,我展示的每个视图控制器都显示在这个视图的层下。
topLevelWindow = [[UIApplication sharedApplication] keyWindow];
if(nil == topLevelWindow)
topLevelWindow = [[[UIApplication sharedApplication] windows] lastObject];
topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, topLevelWindow.bounds.size.width, topLevelWindow.bounds.size.height)];
topView.backgroundColor = [UIColor blackColor];
topView.alpha = 0.5f;
topView.layer.zPosition = MAXFLOAT;
topView.userInteractionEnabled = false;
[topLevelWindow addSubview:topView];
但是,当我展示邮件视图控制器时:
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
[self presentModalViewController:controller animated:YES];
电子邮件输入表单完全按照预期显示,在 topView 层下。然而,与我展示的其他视图控制器不同(并且我展示了几个层),邮件输入视图不响应触摸。因此,用户无法发送电子邮件,甚至无法关闭电子邮件视图控制器。用户除了杀死应用程序之外别无选择。就像 topView 正在拦截所有的触摸输入一样。
对正在发生的事情有任何想法吗?顺便说一句,这在 iOS 7 中运行良好,但在 iOS 9 中不起作用。
任何想法或建议将不胜感激!
【问题讨论】:
标签: ios objective-c cocoa-touch uiview intercept