0

ユーザーが uialertview の特定のボタンをクリックした場合、時間のかかる手順を実行する必要があります。実行中にアクティビティ インジケーターを使用してユーザーに通知したいと思います。目的の出力を得るために正確に何をする必要があるのか​​ わかりません。フローは次のとおりです。

ユーザーがボタン 1 'Build the tower' をクリックします。

「これをしますか、時間がかかります」と表示されるUIAlertview

ユーザーが [はい] をクリックします。今、alertview Delegate メソッドを使用しています。

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

if (buttonIndex == 1) {//Yes the user wants to do this
 //Show activity indicator here

    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]     initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

    indicator.center = CGPointMake(alert.bounds.size.width / 2, alert.bounds.size.height - 50);
    [indicator startAnimating];
    [alertView addSubview:indicator];
    [indicator release];

//
[SimpleFunctions doThatMethodThatTakesALongTime];
 //remove activity indicator here

    }

}

ここでは、「大きな処理」が完了する前にアクティビティ インジケーターを表示したいと考えています。

alertview にアクティビティ インジケーターを追加する例は、上記の alertview にインジケーターを追加する方法を示しています。しかし、ユーザーが「はい」をクリックするまで、そのインジケーターを表示したくありません。それを達成する方法についての指針は素晴らしいでしょう。質問が明確になったことを願っています。そうでない場合はお知らせください。

ありがとう

4

4 に答える 4

0

の境界を使用しAlertViewてアクティビティ インジケーターをレイアウトすることは良い考えですが、の境界はが呼び出されるAlertView前はすべてゼロであることに注意してください。[alertView show]

于 2013-03-04T10:56:10.110 に答える
0

ここ:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

if (buttonIndex == 1) {//Yes the user wants to do this
 UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc]
                initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];   
loading.frame=CGRectMake(150, 150, 16, 16);
[YOURAlertView addSubview:loading];
[SimpleFunctions doThatMethodThatTakesALongTime];
[self performSelector:@selector(turnOff:) withObject:nil afterDelay:1.0];

    }
}

-(void) turnOff {
[loading removeFromSuperview];
}
于 2012-06-29T14:19:02.550 に答える
0

デリゲートであなたに応じて使用し、タグを作成して、さまざまなアラートを識別します...

UIAlertview *myAlertView = [[UIAlertView alloc] initWithTitle:@"Loading" message:@"Your Message" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];

 UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc]
            initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];   
 loading.frame=CGPointMake(myAlertView .bounds.size.width / 2, myAlertView .bounds.size.height - 40);
 [myAlertView addSubview:loading];
 [loading release];
 [myAlertView show];

これはあなたを助けるかもしれません

于 2012-06-29T14:21:40.697 に答える
0

アラート ビューのリファレンス: http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html

デリゲート メソッド- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexでは、alertView に何かを追加できます。

例えば

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    UIActivityIndicator * ai = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [alertView addSubview:activityIndicator];
    activityIndicator.frame = CGRectMake(80, 0, 30, 30);
    [ai startAnimating];
}

ai後で削除するために、ivar (クラス変数) として追加します。

[self.ai removeFromSuperview];

お役に立てれば。

編集: 心に留めておくべきことの 1 つは、この方法では、おそらく自分でアラート ビューの非表示を管理する必要があるということです。- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animatedアラート ビューでメソッドを使用して、アラートを閉じることができます。

于 2012-06-29T14:09:38.013 に答える