如何判断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

上一篇: How to tell if UIViewController's view is visible

下一篇: Swift dynamic tableview in UIViewController