[英]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.