为了账号安全,请及时绑定邮箱和手机立即绑定

如何判断UIViewController的视图是否可见

如何判断UIViewController的视图是否可见

iOS
郎朗坤 2019-07-22 14:37:33
如何判断UIViewController的视图是否可见我有一个选项卡应用程序,有很多视图。有没有办法知道UIViewController当前在UIViewController?(寻找财产)
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

风景窗口属性如果视图当前可见,则为非零,因此请检查视图控制器中的主视图:

调用视点方法会导致视图加载(如果没有加载),这是不必要的,可能是不可取的。最好先检查一下,看看是否已经加载了。为了避免这个问题,我向isViewLoed添加了调用。

if (viewController.isViewLoaded && viewController.view.window) {
    // viewController is visible}

或者,如果有UINavigationController管理视图控制器,则可以检查其visibleViewController而是财产。

此外,在iOS 9(或更高版本)上的SWIFT中:

if viewController.viewIfLoaded?.window != nil {
    // viewController is visible}


查看完整回答
反对 回复 2019-07-22
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

以下是@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


查看完整回答
反对 回复 2019-07-22
?
森栏

TA贡献1810条经验 获得超5个赞

上述解决方案有几个问题。例如,如果您使用的是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;}


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 716 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信