2009-06-24 104 views
6

我一直在移动一个略高的警报视图,所以我可以在屏幕上放置一个键盘。我只是通过抓住警报的框架并在我已经显示警报之后更改Y来做到这一点,以便框架变量是合法的。这在模拟器上可以正常工作,但是当我在硬件上执行此操作时,警报将从正确的位置开始,但几乎立即跳到它原来的垂直中心位置。 UIAlertView的位置是一个固定的东西,不应该根据可用性准则进行更改,或者我只是做了不正确的事情?我可以移动UIAlertView吗?

谢谢!

回答

22

什么操作系统,你想对此?我得到这个对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的警报框架设置为整个屏幕的中心。

1

是不是意味着0123'的警报 - 即:当警报处于活动状态时,您通常不会执行任何其他用户输入?如果是这种情况,那么为什么你需要键盘的可视性?

+3

如果他将文本字段添加为警报视图的子视图,那么在下载应用程序之前,当它提示您输入iTunes密码时,希望看到键盘就像App Store一样有意义。 – LucasTizma 2009-10-30 16:48:44

+0

感谢您的评论 - 我没有想到这种情况。 – teabot 2009-10-30 17:53:25

2

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

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

对我来说,这看起来像是对可随时更改的UIAlertViews的未记录行为进行线程化。我认为苹果公司并不意味着我们只能使用警报,而不是使用文本和按钮(即使他们自己的应用程序违反了此规则)。

我一个人会开始为这种情况建立我自己的自定义警报。

相关问题