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

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

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

iOS
哆啦的时光机 2019-07-26 15:14:50
如何判断UIViewController的视图是否可见我有一个选项卡应用程序,有很多视图。有没有办法知道UIViewController当前在UIViewController?(寻找财产)
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

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

调用视点方法会导致视图加载(如果没有加载),这是不必要的,可能是不可取的。最好先检查一下,看看是否已经加载了。为了避免这个问题,我向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-27
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞


以下是@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-27
?
米脂

TA贡献1836条经验 获得超3个赞

上述解决方案有几个问题。例如,如果您使用的是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-27
  • 3 回答
  • 0 关注
  • 401 浏览

添加回答

举报

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