0

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

我通过显示 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),所以我改变了我的方式正在做事。这并没有解决问题。

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

我怀疑这个问题与尝试为 armv6 构建有关(并且确实从我尝试构建的体系结构中删除它会给我正确移动的警报)。

我想我现在应该回答我的问题了……我很难理解为什么会这样。我在某处读到(现在找不到链接),在 iOS 4 及更高版本中向 UIAlertView 添加文本字段时,您不需要手动向上移动警报。由于我正在为至少 iOS 4 构建,这不应该适用于两种架构吗?

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

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

4

1 回答 1

1

冲,

我设法提出了一个可行的解决方案,并使 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屏幕的中心,如果是,则将其向上移动(即,如果操作系统尚未计算出它的正确位置)。注意:如果您希望这适用于纵向和横向方向,您需要添加一个检查设备处于哪个特定方向,然后相应地调整警报向上移动的量。

于 2011-11-24T10:52:21.887 回答