How can I disable all Input while the UIActivityIndicatorView
is spinning?
Thanks
How can I disable all Input while the UIActivityIndicatorView
is spinning?
Thanks
You can call beginIgnoringInteractionEvents
when you start the spinner
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
and endIgnoringInteractionEvents
when you stop it.
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
Just make sure your code always comes to the point where you call endIgnoringInteractionEvents
, otherwise your app will freeze (from the users point of view).
sendEvent:
and there decide (ie. by checking some kind of flag if spinner is animating or not) if you'll send an event down the responder chain or ignore it. One way to hijaack this window is here (the answer with MyKindOfWindow
definition). –
Luau UIApplication.sharedApplication().beginIgnoringInteractionEvents()
... –
Luau In Swift 3.0:
To disable interaction:
UIApplication.shared.beginIgnoringInteractionEvents()
To restore interaction:
UIApplication.shared.endIgnoringInteractionEvents()
Just an addition to rokjarc answer. Here an example of watchdog to keep app alive. You can call always with some critical interval, maybe 10 sec. And if you need to enable within 10 sec, just call "enable" method.
UIWindow * __weak mainWindow;
- (void)disableGlobalUserInteractionForTimeInterval:(NSTimeInterval)interval
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
mainWindow = [[[UIApplication sharedApplication] windows] lastObject];
});
[mainWindow setUserInteractionEnabled:false];
if (interval > 0)
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(interval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self enableGlobalUserInteraction];
});
}
}
- (void)enableGlobalUserInteraction
{
if (mainWindow)
{
[mainWindow setUserInteractionEnabled:true];
}
}
In Swift 5:
// activity indicator starts
view.isUserInteractionEnabled = false
...
// activity indicator stops
view.isUserInteractionDisabled = true
© 2022 - 2024 — McMap. All rights reserved.