繁体   English   中英

从AppDelegate取消viewController

[英]Dismissing viewController from AppDelegate

我正在从AppDelegate提供一个教程视图:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

....

  EERootVC *rootVC = (EERootVC *)self.window.rootViewController;
    UINavigationController *navcon = (UINavigationController*)rootVC.contentViewController;

    EETutorialRootVC *rootTutorialViewController = [rootVC.storyboard instantiateViewControllerWithIdentifier:@"EETutorialRoot"];

[navcon pushViewController:rootTutorialViewController animated:NO];

return YES
}

完成后,如何取消这个新视图?

我已经试过了:

[self.navigationController  popViewControllerAnimated:YES];

哪个可行,但它返回的视图似乎被切断(向上移动?)

它不会是self因为在AppDelegate调用self会引用自身(将为AppDelegate

如果要从AppDelegate消除它,只需执行与呈现它相同的操作即可:

[rootTutorialViewController popViewControllerAnimated:YES]; 

但是您更有可能不会在AppDelegate关闭它,然后您更有可能在视图控制器主类中关闭它,这就是您将自己称为self的地方。

嗯,看来您需要使用一些自定义设置来提供深入的了解,因此我们可以为您提供更好的答案。

如果window.rootViewController是UINavigationController的实例,则将具有默认的行为,如果将ViewController推入并弹出,则一切看起来都会很好。

但是,您是从window.rootViewController的自定义属性获取UINavigationController的。 这表明EERootVC是一些自定义的ContainerViewController,我敢打赌,在那里您将EERootVC.contentViewController添加到它的视图并设置它的框架是有问题的。

例如,将UINavigationController设置为Window的rootViewController,我敢打赌它也能按预期工作。

除此之外,您可以在不使用动画的情况下将其推送,而在使用动画时将其关闭。 为了获得良好的用户体验,您可能需要再次考虑该方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM