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