如何检查当前是否显示UIViewController
?
我的UIViewControllers
正在监听NSNotifications
- 即使它们没有显示(即未显示)。所以我可以在后台观察UIViewController
来NSNotifications
NSNotificationCenter
。当NSNotification
发布并收到UIViewController
时,我想知道它是否正在显示。如果不是,我将设置一个布尔值,以便在显示视图时处理它。如果它当前正在显示,我会做更多的事情,比如立即更新表等等......
答案 0 :(得分:15)
您需要检查您的viewcontroller是否位于navigationcontroller的viewcontroller数组的堆栈之上。示例代码是
if (self.navigationController.topViewController == self) {
//the view is currently displayed
}
您可以在viewWillAppear
方法中使用此方法来检查当前视图是否可见。
答案 1 :(得分:6)
检查它是否附在窗口上。如果它不是nil
它在层次结构中附加到屏幕上(当然它可能超出屏幕界限,被其他视图覆盖或设置隐藏标志)
if (myViewController.view.window) {
// I'm attached to the window
} else {
// not attached to the window
}
答案 2 :(得分:4)
您可以在viewWillAppear
和viewWillDisappear
方法中使用标记。
答案 3 :(得分:1)
为什么不在viewWillDisappear中删除通知侦听器并将其添加到viewWillAppear中?
编辑:误读了他的问题,抱歉。
建议的答案:在viewDidDisappear和viewDidAppear中设置自己的标志(BOOL)。
答案 4 :(得分: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.
}
答案 5 :(得分:0)
我认为检查viewController.view.superview
应该有效。
答案 6 :(得分:0)
现在重放这个问题为时已晚。
要检查UIViewController
的实例当前是否位于屏幕的顶部,或检查它是否显示在屏幕上,您可以将像这样检查:
// 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.
}
答案 7 :(得分:0)
另一种基于检查 window
属性的替代方法
if viewController.viewIfLoaded?.window != nil {
// visible
}