22

如何检查UIViewController当前是否正在显示?

UIViewControllers正在听NSNotifications- 即使它们没有显示(即未显示)。所以我可以UIViewController在后台观察10NSNotificationsNSNotificationCenter。当 anNSNotification被发布和接收时UIViewController,我想知道它当前是否正在显示。如果不是,我将设置一个布尔值,以便在呈现视图时对其进行处理。如果它当前正在显示,我会做更多的事情,比如立即更新表格,等等......

4

8 回答 8

21

您需要检查您的视图控制器是否位于导航控制器的视图控制器数组堆栈的顶部。示例代码是,

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

您可以在viewWillAppear方法内部使用它来检查当前视图是否可见。

于 2012-10-09T22:26:23.670 回答
10

检查它是否附着在窗口上。如果不是nil,它在附加到屏幕的层次结构中(当然它可能超出屏幕的边界,被其他视图覆盖或设置了隐藏标志)

if (myViewController.view.window) {
  // I'm attached to the window
} else {
  // not attached to the window
}
于 2012-10-09T20:56:11.617 回答
3

您可以为此使用标志viewWillAppearviewWillDisappear方法。

于 2012-10-09T22:34:34.860 回答
1

为什么不把viewWillDisappear中的通知监听器去掉,添加到viewWillAppear中呢?

编辑:误读了他的问题,对不起。

建议答案:在 viewDidDisappear 和 viewDidAppear 中设置自己的标志 (BOOL)。

于 2012-10-09T20:37:17.853 回答
1

为每个 ViewController 指定标题,然后通过下面给出的代码获取当前 ViewController 的标题。

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. 

}
于 2013-08-19T09:15:09.547 回答
0

我认为检查viewController.view.superview应该有效。

于 2012-10-09T20:45:02.683 回答
0

重温这个问题为时已晚。

要检查 a 的实例UIViewController当前是否在屏幕顶部或检查它是否显示在 screen 上,您可以进行如下检查:

// 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.
    }
于 2019-06-25T09:01:09.160 回答
0

另一种基于检查window属性的选择

if viewController.viewIfLoaded?.window != nil {
    // visible
}
于 2021-04-03T08:44:28.113 回答