views:

243

answers:

2

Hi all,

I've created an app where I'm creating a UIProgressBarHUD to show that something is loading. My question is, how can I disable the view so nothing can be pressed untill the loading is finished?

I've tried setting:

[self.view setUserInterationEnabled:NO];

However this doesn't work :/

Here is the code I'm using for adding the UIProgressHUD:

- (IBAction) showHUD:(id)sender
{
       //[self.view setUserInteractionEnabled:NO];

       UIProgressHUD *HUD = [[UIProgressHUD alloc]
initWithWindow:[[UIApplication sharedApplication] keyWindow]];
       [HUD setText:@"Loading…"];
       [HUD show:YES];

       [HUD performSelector:@selector(done) withObject:nil afterDelay:1.5];
       [HUD performSelector:@selector(setText:) withObject:@"Done!"
afterDelay:1.5];
       [HUD performSelector:@selector(hide) withObject:nil afterDelay:4.0];

       //[self.view setUserInteractionEnabled:YES];

       [HUD release];
}

Any help would be muchly appreciated!! - James

+1  A: 

As pointed out here, UIProgressHUD is private. You should not use it.

There is a library that gives you what you are looking for though, here:

http://www.bukovinski.com/2009/04/08/mbprogresshud-for-iphone/

It allows you to keep the user from tapping anything while it is updating as you requested.

Matt Long
Oh right, I've always read to be careful with non documented features. Why on earth would apple have this available if you aren't allowed to use it? I'll give the MBProgressHUD a go.. Thanks
ing0
I've found that this method is good but when continuously pressing the button to show the HUD it will crash within no time :/
ing0
Have you used this code? By removing the HUD release in hudWasHidden then it no longer crashes.. hmm
ing0
+3  A: 

You can disable user interaction with the nifty property named userInteractionsEnabled, that is defined for UIView. It just so happens that UIWindow is a subclass of UIView, we we can easily disable user interactions for out whole app.

anyViewInYouApp.window.userInteractionsEnabled = NO;

Or keep a reference to the window if you like.

PeyloW
Hey, I like that!
mahboudz