UIAlertController 禁用屏幕上的所有触摸事件

Posted

技术标签:

【中文标题】UIAlertController 禁用屏幕上的所有触摸事件【英文标题】:UIAlertController disables all Touch events on screen 【发布时间】:2014-10-28 08:27:17 【问题描述】:

我必须使用 UIAlertController 显示带有选择器、取消和完成按钮的视图。这是我写的代码:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
        UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"" style:UIAlertActionStyleDefault handler:nil];
        [alertController addAction:alertAction];
        [alertController.view addSubview:pickerView];
        [alertController.view addSubview:cancelBtn];
        [alertController.view addSubview:doneBtn];
        [alertController.view setBounds:CGRectMake(0, 180, self.view.frame.size.width, 400)];

这就是我调用当前视图控制器方法的方式:

UIPopoverPresentationController *popover = alertController.popoverPresentationController;
       if (popover)
       
          popover.sourceRect = CGRectMake(0, 0, 320, 550);
          popover.permittedArrowDirections = UIPopoverArrowDirectionAny;
        
 [self presentViewController:alertController animated:YES completion:nil];

在屏幕上出现警报控制器屏幕后,我无法点击取消和完成按钮以及屏幕上的任何位置。请帮我解决这个问题。

如果没有设置边界,取消和完成按钮会出现在页面底部:

每当我为警报控制器设置边界时,我都能看到正确的视图,但无法选择任何内容:

【问题讨论】:

你发现了吗? 【参考方案1】:

我敢打赌你的界限是不正确的。所以这一行:

[alertController.view setBounds:CGRectMake(0, 180, self.view.frame.size.width, 400)];

正在将您的视图边界设置为从 180 开始。

编辑:基于下面的 cmets如果你想设置按钮位置,你应该修改你的按钮框架,而不是 alertview 边界。

记住框架是根据父视图坐标系的视图位置。 Bounds 是与其自身坐标系相关的视图范围。

【讨论】:

我已经验证过了。边界宽度不为 0。 在 presentViewController 完成时添加一个块,用于打印视图边界和大小。未检测到点击的问题通常与边界有关。 已添加。我设置的值被打印出来了。 你为什么从 180 开始你的界限?请注意,边界是根据自己的视图坐标系定义的。很抱歉坚持,这个问题通常与边界有关。 每当我评论和运行边界线时,我都可以点击取消和完成按钮。但是这些都出现在页面底部。如果是这样的话,对用户的选择将是一个问题。所以我设置为180。

以上是关于UIAlertController 禁用屏幕上的所有触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

UIAlertController - 将自定义视图添加到操作表

Xamarin.ios 点击屏幕时关闭 UIAlertController ActionSheet

禁用 Google 同意屏幕上的复选框

如何在 Android 上的 Unity 中禁用用于屏幕截图的游戏对象?

如何在屏幕锁定或最小化浏览器期间禁用移动设备上的网页音频?

UIAlertController 上的 UITapGestureRecognizer 未触发