Search code examples
iphoneioscocoa-touchipad

Disabling user interaction of the current view on screen


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?


Solution

  • 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.