UIAlertView文本字段不向上移动

时间:2011-11-23 10:22:07

标签: xcode architecture uialertview armv7 armv6

我想显示获取用户用户名和密码的提示。

我这样做是通过显示UIAlertView并将UITextFields作为子视图添加到其中。

最近我将项目移至XCode 4.2并更新了我的所有项目设置。我的基本SDK设置为iOS 5.0,我的部署目标设置为4.0。

然后我注意到它只是为armv7架构而构建,因此我将其改为包含armv6,因为我也想支持iPhone 3G。

执行此操作后,我注意到UIAlertView没有像以前那样向上移动,现在键盘在显示时被覆盖了。我在Apple文档中读到你不应该继承UIAlertViews(http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html),所以我改变了我做事的方式。这并没有解决问题。

我注意到我可以通过将构建设置 - “仅构建活动架构”设置为YES来使其在我的手机(iPhone 4,即armv7架构)上工作。

我怀疑这个问题与尝试构建armv6有关(实际上,我正在尝试构建的架构中删除它会给我提醒正确的警报)。

我想我现在应该回答我的问题......我很难理解为什么这样做会如此。我在某处(现在找不到链接)在向iOS 4及更高版本的UIAlertView添加文本字段时不需要手动移动警报。由于我至少在iOS 4上构建,所以这两种体系结构都不适用吗?

另外,我怎样才能让它为armv6构建并且仍然有正确向上移动的警报?

编辑:也许我错了,但我注意到我有2个手机实例,我可以将应用程序部署到。选择第一个和建筑物给我一个应用程序,UIAlertViews应该在它们应该的时候不会向上移动,但选择第二个使它正常工作。会发布截图,但我是新用户,所以我还没有必要的权限......

1 个答案:

答案 0 :(得分:1)

Oki,

我设法提出了一个可以使UIAlertView处于正确位置的解决方案,但我仍然不能完全确定问题的根本原因是什么。

我通过回复UIAlertViewDelegate方法willPresentAlertView:并执行以下操作

来解决此问题
- (void) willPresentAlertView: (UIAlertView *) alertView {

    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

    if (keyWindow.center.y - alertView.center.y < 0.001f) {

        CGPoint center = [alertView center];
        center.y = center.y - 108.0f;
        [alertView setCenter:center];  
    }
}

它检查UIAlertView是否在屏幕的中心,如果是,则将其向上移动(即,如果操作系统尚未计算出它的正确位置)。注意:您需要添加检查设备所处的特定方向,然后根据纵向和横向方向调整警报向上移动的数量。