我可以移动 UIAlertView 吗?

Posted

技术标签:

【中文标题】我可以移动 UIAlertView 吗?【英文标题】:Can I move a UIAlertView? 【发布时间】:2009-06-24 18:06:12 【问题描述】:

我一直在将警报视图稍微移高一点,这样我也可以在屏幕上安装一个键盘。我只是通过抓取警报的框架并在我已经显示警报之后更改 Y 来做到这一点,以便框架变量是合法的。这在模拟器上运行良好,但是当我在硬件上执行此操作时,警报从正确的位置开始,但几乎立即跳到原来的垂直中心位置。 UIAlertView 位置是一个固定的东西,不应该根据可用性指南改变,还是我只是做错了什么?

谢谢!

【问题讨论】:

【参考方案1】:

您要针对什么操作系统进行此操作?我让它在 OS 3.0 模拟器和 OS 3.0 设备上都可以工作:

UIAlertView * alert = [ [ UIAlertView alloc ] initWithTitle:@"Alert" message:@"Alert" 
                        delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil ];

alert.transform = CGAffineTransformTranslate( alert.transform, 0.0, 100.0 );

[ alert show ];

CGAffineTransformTranslate 接受三个参数:现有变换、x 变换和 y 变换。在我使用的示例中,警报视图比正常情况高出 100 像素。试一试,看看会发生什么。

另外,我很确定您可以在显示警报之前修改框架,因为它可能会将 init 中的警报框架默认设置为整个屏幕的中心。

【讨论】:

感谢转换成功了,由于某种原因,使用框架坐标移动它是个问题。 它在 ios 3.0 中也适用于我,但由于某种原因它在 ios 4.0 中不起作用......【参考方案2】:

由于 iOS4 在 UIAlertViews 中移动变得棘手。我注意到,如果您在 UIAlertView 上添加 UITextField 子视图,则在 iOS4 上,警报会向上移动,以便键盘不会与它重叠。这不会发生

我还注意到,即使在调用 show 之后,警报的框架也没有初始化,因此没有简单的编程方法来执行相对 CGAffineTransformation。唯一的解决方案是根据操作系统版本进行条件转换。

对我来说,这看起来像是对 UIAlertViews 的未记录行为进行线程化,这种行为随时可能发生变化。我不认为 Apple 打算让我们将警报用于文本和按钮以外的任何内容(即使他们自己的应用程序违反了此规则)。

我将开始为此类场景构建自己的自定义警报。

【讨论】:

【参考方案3】:

提醒不应该是modal - 即:当提醒处于活动状态时,您通常不会执行任何其他用户输入?如果是这种情况,那您为什么需要键盘可见性?

【讨论】:

如果他添加了一个文本字段作为警报视图的子视图,那么希望看到键盘就像 App Store 在下载应用程序之前提示您输入 iTunes 密码时所做的那样是有意义的. 感谢您的评论 - 我没有想到那种情况。

以上是关于我可以移动 UIAlertView 吗?的主要内容,如果未能解决你的问题,请参考以下文章

iOS8 的 UIAlertController 标题始终为零

applicationWillTerminate 问题

我可以检查现在是不是显示任何 UIAlertView 吗? [复制]

我可以自定义 UIAlertView [iPhone iOs 4] 吗?

可以将 UIPickerView 放在 UIAlertView 之前吗?

UIAlertView 可以通过委托传递字符串和整数吗