My app has many views and their respective controllers. Now I have a set of model classes with business logic in them. One of the model classes(subclass of NSObject) has the responsibility of managing security. It's intended function is to listen for a particular instruction from a web server and if a 'disable' message arrives from server, disable the UI for any further usage.
Now the 'disable' message can arrive at any instant during the functioning of the app and any view can be visible on screen. How do I determine which view is visible to the user(from my model class) and disable user interaction for it?
Put your view to be "tap disabled" into a Group then apply the modifier . allowsHitTesting(false) to disable interaction with any view inside the group. To enable interaction switch the modifier to true.
Maybe you want the whole application to not react at all?
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
use [[UIApplication sharedApplication] endIgnoringInteractionEvents];
to revert this (credits to nerith)
same for Swift:
UIApplication.sharedApplication().beginIgnoringInteractionEvents() UIApplication.sharedApplication().endIgnoringInteractionEvents()
and Swift 3/4
UIApplication.shared.beginIgnoringInteractionEvents() UIApplication.shared.endIgnoringInteractionEvents()
edit for iOS 13: beginIgnoringInteractionEvents is deprecated in iOS13
just make a new full size View and lay it over your current view. that will allow you to block any user interaction.
Here is the code for Swift 3
UIApplication.shared.beginIgnoringInteractionEvents() UIApplication.shared.endIgnoringInteractionEvents()
Slight update to the syntax
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With