当前可见视图控制器检查

Leo*_*Leo 2 iphone objective-c uiviewcontroller ios

我正从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!");
    }
Run Code Online (Sandbox Code Playgroud)

它正在打印current view is not parent!".但我确信我的应用程序上运行的当前视图是ParentEndViewController,它应该打印current view is parent!.

问题出在哪儿?

dan*_*ata 5

问题是,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");
}
Run Code Online (Sandbox Code Playgroud)

如果您正在检查导航控制器的最后一个视图控制器,您应该尝试以下方法:

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");
 }
Run Code Online (Sandbox Code Playgroud)