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

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

我有一个选项卡应用程序,有很多视图。有没有办法知道UIViewController当前在UIViewController?(寻找财产)



郎朗坤
浏览 717回答 3
3回答

桃花长相依

风景窗口属性如果视图当前可见,则为非零,因此请检查视图控制器中的主视图:调用视点方法会导致视图加载(如果没有加载),这是不必要的,可能是不可取的。最好先检查一下,看看是否已经加载了。为了避免这个问题,我向isViewLoed添加了调用。if (viewController.isViewLoaded && viewController.view.window) {     // viewController is visible}或者,如果有UINavigationController管理视图控制器,则可以检查其visibleViewController而是财产。此外,在iOS 9(或更高版本)上的SWIFT中:if viewController.viewIfLoaded?.window != nil {     // viewController is visible}

qq_笑_17

以下是@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,主视图将始终返回trueif(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;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS