アクティビティインジケーターを全画面で表示しようとしているので、アラートビュープロセスとしてアクティビティインジケーターがオフになるまで、ユーザーは画面のどのボタンも押すことができません。電話をかけました[activityView startAnimating]
が、後ろのボタンを押すことができます。それを防ぐ方法はありますか?
今からありがとう。
アクティビティインジケーターを全画面で表示しようとしているので、アラートビュープロセスとしてアクティビティインジケーターがオフになるまで、ユーザーは画面のどのボタンも押すことができません。電話をかけました[activityView startAnimating]
が、後ろのボタンを押すことができます。それを防ぐ方法はありますか?
今からありがとう。
画面にアクティビティインジケーター付きのalertViewを表示するのが最善の方法です。これには、次のコードを使用できます。
UIAlertView
次のようなプロパティを宣言します。
@property (nonatomic, strong) UIAlertView *sendAlert;
self.sendAlert = [[UIAlertView alloc] initWithTitle:@"Loading" message:@"" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
act setFrame:CGRectMake(115, 60, 50, 50)];
[act startAnimating];
[sendAlert addSubview:act];
act = nil;
[sendAlert show];
アラートを削除する場合は、次を使用できます。
[sendAlert dismissWithClickedButtonIndex:0 animated:YES];
sendAlert = nil;
別の方法として、ビュー自体にアクティビティインジケーターを追加し、戻るボタンのuserInteractionをfalseに設定することができます。タスクを終了すると、Trueに設定されます。しかし、それは良い方法ではありません。
あなたはこれを試すことができます
UIAlertView *alert= [[[UIAlertView alloc] initWithTitle:@"Loading\nPlease Wait..." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil] autorelease];
[alert show];
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.center = CGPointMake(150, 100);
[indicator startAnimating];
[alert addSubview:indicator];
[indicator release];
アラートを削除する場所にこの行を追加します
[alert dismissWithClickedButtonIndex:0 animated:YES];
このような読み込みインジケータには、 MBProgressHUDを使用できます。これは、さらにカスタマイズしたい場合にうまく拡張できる、MITライセンスの優れたクラスです。
この要件については、すべてのビューでアクセスできる次のコードを使用してください。
この次のコードとオブジェクトを次のAppDelegate.h
ようなファイルに追加します。
UIView *activityView;
UIView *loadingView;
UILabel *lblLoad;
AppDelegate.m
この次のコードをファイルに貼り付けます
#pragma mark - Loading View
-(void) showLoadingView {
//NSLog(@"show loading view called");
if (loadingView == nil)
{
loadingView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 60.0, 320.0, 420.0)];
loadingView.opaque = NO;
loadingView.backgroundColor = [UIColor darkGrayColor];
loadingView.alpha = 0.5;
UIView *subloadview=[[UIView alloc] initWithFrame:CGRectMake(84.0, 190.0,150.0 ,50.0)];
subloadview.backgroundColor=[UIColor blackColor];
subloadview.opaque=NO;
subloadview.alpha=0.8;
subloadview.layer.masksToBounds = YES;
subloadview.layer.cornerRadius = 6.0;
lblLoad=[[UILabel alloc]initWithFrame:CGRectMake(50.0, 7.0,80.0, 33.0)];
lblLoad.text=@"LoadingView";
lblLoad.backgroundColor=[UIColor clearColor];
lblLoad.textColor=[UIColor whiteColor];
[subloadview addSubview:lblLoad];
UIActivityIndicatorView *spinningWheel = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(10.0, 11.0, 25.0, 25.0)];
[spinningWheel startAnimating];
spinningWheel.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
[subloadview addSubview:spinningWheel];
[loadingView addSubview:subloadview];
[spinningWheel release];
}
[self.window addSubview:loadingView];
//[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
}
-(void) hideLoadingView {
if (loadingView) {
[loadingView removeFromSuperview];
[loadingView release];
loadingView = nil;
}
}
次のように、任意のクラスで必要なときにこのメソッドを呼び出します。
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate showLoadingView];
アクティビティインジケーターの開始時に、現在のビューの上にUIViewを追加します。
UIView *overlayView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
overlayView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
[self.navigationController.view addSubview:overlayView];