15

次のコードは、iOS 5 から 6.1 まで完全に機能します。私はそのコードでストアにアプリケーションさえ持っています:

-(void)showActivityIndicator
{
    if(!mLoadingView) //
    {
        mLoadingView = [[UIAlertView alloc] initWithTitle:@"" message:@"" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
        mLoadingView.tag = kAlertViewTag;
    }

    [mLoadingView show];
}

- (void)willPresentAlertView:(UIAlertView *)alertView
{
    if (alertView.tag == kAlertViewTag)
    {
        UIActivityIndicatorView *actInd = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
        actInd.frame = CGRectMake(128.0f, 45.0f, 25.0f, 25.0f);
        [alertView addSubview:actInd];
        [actInd startAnimating];

        UILabel *l = [[UILabel alloc]init];
        l.text = NSLocalizedString(@"PRODUCT_PURCHASE_INDICATOR_TITLE", @"Please wait...");
        l.font = [UIFont fontWithName:@"Helvetica" size:16];

        float strWidth = [l.text sizeWithFont:l.font].width;
        float frameWidth = alertView.frame.size.width;
        l.frame = CGRectMake((frameWidth - strWidth)/2, -25, 210, 100);

        l.textColor = [UIColor whiteColor];
        l.shadowColor = [UIColor blackColor];
        l.shadowOffset = CGSizeMake(1.0, 1.0);
        l.backgroundColor = [UIColor clearColor];
        [alertView addSubview:l];
    }
}

ボタンなし、アクティビティ インジケーターとラベル付きのアラート ビューが表示されます。ただし、iOS7 では、白い角丸長方形のみが表示され、アクティビティ インジケーターは表示されません。

これを iOS 5 から 7 まで動作させるにはどうすればよいですか?

アップデート:

よりわかりやすくするために、スクリーンショットを追加しています。以下は iOS 5 から 6.1 のスクリーンショットです。そこでうまくいきます。

ここに画像の説明を入力

以下はiOS7です。ご覧のとおり、サイズも小さくなっています。完全に初期化されていないようです。

ここに画像の説明を入力

4

3 に答える 3

20

現在iOS7addSubviewでは利用できませんUIAlertView

このUIAlertViewクラスはそのまま使用することを意図しており、サブクラス化はサポートしていません。このクラスのビュー階層は非公開であり、変更してはなりません

代わりに、 を使用できますSVProgressHUD

于 2013-09-19T12:55:07.857 に答える
20

iOS 7 以降では、次のことができます。

    [alertView setValue:customContentView forKey:@"accessoryView"];

標準アラート ビューでカスタム コンテンツを取得します。

于 2013-11-22T14:52:38.927 に答える
19

この問題を非常に迅速に修正する必要があったため、アニメーションを含む iOS7 UIAlertView スタイルの UIView を作成しました。これは、任意のカスタム コンテンツで拡張できます。

私のソリューションを使用できる人が他にもいるかもしれないので、コード全体を Github で利用できるようにしました

ここに画像の説明を入力

また、以前の OS バージョンで UIAlertView を使い続けたい場合は、コードをフォークする必要があります。それは聞こえるほど悪いかもしれませんが、私は以下を使用しています:

float sysVer = [[[UIDevice currentDevice] systemVersion] floatValue];

if (sysVer < 7) {
  // your old solution
} else {
  .. // iOS7 dialog code
}

(これは決して本当の解決策ではないことに注意してください。Apple があらゆる種類のダイアログを使用することを望まないのであれば、おそらく使用すべきではありません。)

于 2013-09-20T14:46:32.613 に答える