How do I check if an UIViewController
is currently being displayed?
My UIViewControllers
are listening for NSNotifications
- even if when they are not displayed (ie not shown). So I could have 10 UIViewController
in the background observing NSNotifications
from NSNotificationCenter
. When an NSNotification
is posted and received by the UIViewController
, I'd like to find out if it is currently being shown. If it is not, I will just set a boolean so that it will processed when the View is presented. If it currently being display, I will do more things like update tables immediately, and so forth...
You can use flags in
viewWillAppear
andviewWillDisappear
methods for this.You need to check if your viewcontroller is on top of the stack of navigationcontroller's viewcontroller array. A sample code is,
You can use this inside the
viewWillAppear
method to check whether the current view is visible.Check to see if it's attached to the window. If it's not
nil
it's in hierarchy which is attached to the screen (of course it could be off the bounds of the screen, covered by some other view or have the hidden flag set)I think that checking of
viewController.view.superview
should works.Why don't you remove the notification listener in viewWillDisappear and add it in viewWillAppear?
Edit: misread his question, sorry.
Suggested answer: set your own flag (BOOL) in viewDidDisappear and viewDidAppear.
Specify title to each ViewController and then get the title of current ViewController by the code given bellow.