我有一个tabbar应用程序。有没有办法知道一个特定的UIViewController目前是否可以从UIViewController中看到?
这是@ progrmr的解决方案作为一个UIViewController类别:
// UIViewController+Additions.h
@interface UIViewController (Additions)
- (BOOL)isVisible;
@end
// UIViewController+Additions.m
#import "UIViewController+Additions.h"
@implementation UIViewController (Additions)
- (BOOL)isVisible {
return [self isViewLoaded] && self.view.window;
}
@end
如果视图当前可见,视图的窗口属性是非零,所以检查视图控制器中的主视图:
PS:调用view方法导致视图加载(如果没有加载),这是不必要的,有可能是不受欢迎的。先检查一下是否已经加载好了。我已经添加了调用isViewLoaded来避免这个问题。
if (viewController.isViewLoaded && viewController.view.window) {
// viewController is visible
}
或者,如果您有一个管理视图控制器的UINavigationController,则可以改为查看其visibleViewController属性。
另外,在iOS 9(或更高版本)的Swift中:
if viewController.viewIfLoaded?.window != nil {
// viewController is visible
}