Search code examples
objective-ciosuiviewcontrollernsnotificationcenternsnotification

How do I check if an UIViewController is currently being displayed?


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


Solution

  • You need to check if your viewcontroller is on top of the stack of navigationcontroller's viewcontroller array. A sample code is,

    if (self.navigationController.topViewController == self) {
        //the view is currently displayed
    }
    

    You can use this inside the viewWillAppear method to check whether the current view is visible.