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

ike*_*8me 14 objective-c uiviewcontroller nsnotification nsnotificationcenter ios

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

UIViewControllers正在倾听NSNotifications- 即使它们没有显示(即未显示).所以,我可以有10个UIViewController在背景中观察NSNotificationsNSNotificationCenter.当a NSNotification发布和接收时UIViewController,我想知道它是否正在显示.如果不是,我将设置一个布尔值,以便在显示视图时处理它.如果它当前正在显示,我会做更多的事情,比如立即更新表,等等......

iDe*_*Dev 15

您需要检查您的viewcontroller是否位于navigationcontroller的viewcontroller数组的堆栈之上.示例代码是,

if (self.navigationController.topViewController == self) {
    //the view is currently displayed
}
Run Code Online (Sandbox Code Playgroud)

您可以在viewWillAppear方法中使用此方法来检查当前视图是否可见.

  • @DBD的答案是一种更通用的答案,并且由于问题标题不是那么具体,因此对将来的读者会更有帮助。 (2认同)

DBD*_*DBD 7

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

if (myViewController.view.window) {
  // I'm attached to the window
} else {
  // not attached to the window
}
Run Code Online (Sandbox Code Playgroud)

  • 关闭,但是在检查视图是否在window中之前应该先检查视图是否加载:`if (self.isViewLoaded && self.view.window != nil) ...` (2认同)