0

ユーザーのユーザー名とパスワードを取得するためのプロンプトを表示したい。

これを行うには、UIAlertViewを表示し、それにサブビューとしてUITextFieldsを追加します。

最近、プロジェクトをXCode 4.2に移行し、すべてのプロジェクト設定を更新しました。ベースSDKはiOS5.0に設定されており、デプロイメントターゲットは4.0に設定されています。

その後、armv7アーキテクチャ用にのみ構築されていることに気付き、iPhone 3Gもサポートしたいので、armv6も含めるように変更しました。

これを行った後、UIAlertViewが以前のように上に移動しておらず、表示されたときにキーボードで覆われていることに気付きました。私はAppleのドキュメントでUIAlertViews(http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html)をサブクラス化すべきではないと読んだので、方法を変更しました物事をやっていた。これは問題を解決しませんでした。

ビルド設定-「アクティブなアーキテクチャのみをビルドする」を「はい」に設定することで、自分の電話(iPhone 4、つまりarmv7アーキテクチャ)で動作させることができることに気付きました。

この問題は、armv6用にビルドしようとしていることに関係していると思われます(実際、ビルドしようとしているアーキテクチャからこれを削除すると、正しく上に移動するアラートが表示されます)。

私は今私の質問に取り掛かるべきだと思います...私はこれがなぜそれがそうであるように振る舞うのか理解するのに苦労しています。iOS 4以降でUIAlertViewにテキストフィールドを追加するときにアラートを手動で上に移動する必要がないことをどこかで読みました(現在リンクが見つかりません)。私は少なくともiOS4用にビルドしているので、これは両方のアーキテクチャで機能するべきではありませんか?

また、armv6用にビルドしても、正しく上に移動するアラートを保持するにはどうすればよいですか?

編集:たぶん私は間違っていましたが、アプリをデプロイできる電話のインスタンスが2つあることに気づきました。最初のものを選択して構築すると、UIAlertViewsが必要なときに上に移動しないアプリが得られますが、2番目のものを選択すると正しく機能します。スクリーンショットを投稿しますが、私は新しいユーザーなので、必要な権限がまだありません...

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し、中央にある場合 (つまり、OS がまだ正しい位置を計算していない場合) に上に移動します。注: 縦向きと横向きの両方でこれを機能させたい場合は、デバイスの特定の向きのチェックを追加し、それに応じてアラートを上に移動する量を調整する必要があります。

于 2011-11-24T10:52:21.887 に答える