当前可见视图控制器检查
我正在从我的AppDelegate
类中检查我的ParentEndViewController
当前是否是可见类。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil]; ParentEndViewController *parent = [storyboard instantiateViewControllerWithIdentifier:@"ParentEndViewController"]; if (parent.isViewLoaded && parent.view.window){ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:displayName message:body delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; NSLog(@"current view is parent!"); } else{ NSLog(@"current view is not parent!"); }
打印current view is not parent!
“但我确信在我的应用程序上运行的当前视图是ParentEndViewController
,即它应该打印current view is parent!
哪里有问题?
问题是当你调用[storyboard instantiateViewControllerWithIdentifier:@"ParentEndViewController"];
时,你实例化了一个ParentEndViewController
的新对象[storyboard instantiateViewControllerWithIdentifier:@"ParentEndViewController"];
此实例与根视图控制器的实例不同。 如果您在app delegate中检查应用程序的根视图控制器,您应该尝试
if([self.window.rootViewController isKindOfClass:[ParentEndViewController class]]) { NSLog(@"Luke I'm your father"); } else { NSLog(@"Sorry bro, somebody else is the parent"); }
如果您正在检查导航控制器的最后一个视图控制器,您应该尝试以下方法:
UIViewController *lastViewController = [[self.navigationController viewControllers] lastObject]; if([lastViewController isKindOfClass:[ParentEndViewController class]) { NSLog(@"Luke I'm your father"); } else { NSLog(@"Sorry bro, somebody else is the parent"); }
您可以通过window
属性进行检查:
if(viewController.view.window){ // view visible }else{ // no visible }
我想当你在Appdelegate中检查时,ParentEndViewController不是当前视图,因为应用程序仍然停留在加载过程中。
如果将该代码放入ParentEndViewController的viewDidAppear中,您应该得到正确的结果。