如何判断UIViewController的视图是否可见
我有一个tabbar应用程序,有许多视图。 有没有办法从UIViewController中知道某个特定的UIViewController是否可见? (寻找财产)
如果视图当前可见,则视图的窗口属性为非零,因此请检查视图控制器中的主视图:
[编辑]调用view方法会导致视图加载(如果没有加载),这是不必要的,可能是不可取的。 首先检查是否已经加载会更好。 我已将该调用添加到isViewLoaded以避免此问题。
if (viewController.isViewLoaded && viewController.view.window) {
// viewController is visible
}
或者如果你有一个管理视图控制器的UINavigationController,你可以检查它的visibleViewController属性。
另外,在iOS 9(或更高版本)的Swift中:
if viewController.viewIfLoaded?.window != nil {
// viewController is visible
}
这里是@ 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
上述解决方案有几个问题。 例如,如果您使用的是UISplitViewController
,则主视图将始终返回true
if(viewController.isViewLoaded && viewController.view.window) {
//Always true for master view in split view controller
}
相反,采取这种简单的方法似乎在大多数情况下都能很好地工作,即使不是全部情况:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
//We are now invisible
self.visible = false;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
//We are now visible
self.visible = true;
}
链接地址: http://www.djcxy.com/p/87731.html