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

前端 未结 7 607
臣服心动
臣服心动 2021-01-01 16:42

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

My UIViewControllers are listening for NSNotifications - e

相关标签:
7条回答
  • 2021-01-01 16:53

    Specify title to each ViewController and then get the title of current ViewController by the code given bellow.

    NSString *currentController = self.navigationController.visibleViewController.title;
    
    Then check it by your title like this
    
    if([currentController isEqualToString:@"myViewControllerTitle"]){
    
        //write your code according to View controller. 
    
    }
    
    0 讨论(0)
  • 2021-01-01 16:55

    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.

    0 讨论(0)
  • 2021-01-01 16:57

    You can use flags in viewWillAppear and viewWillDisappear methods for this.

    0 讨论(0)
  • 2021-01-01 16:59

    I think that checking of viewController.view.superview should works.

    0 讨论(0)
  • 2021-01-01 17:08

    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.

    0 讨论(0)
  • 2021-01-01 17:15

    It's too late to replay on this question.

    To check the instance of a UIViewController is currently on the top of the screen or to check if it is showing on screen, you can put a check like:

    // Get the topmost view showing on the screen as below
        UIViewController * currentVC = ((UINavigationController*)app.window.rootViewController).visibleViewController;
    
    // Now check whether the viewcontroller you want to show is the same as the currently showing view controller.
        if (currentVC.class == myVC.class) {  // Here myVC is any/new instance of the viewcontroller you would like to check or show (if not shown).
             // If both are same then it returns true and executes this block of code.
        }
    
    0 讨论(0)
提交回复
热议问题