[英]Can't present viewcontroller through URL scheme
我正在尝试通过URL方案提供来自AppDelegate
的viewcontroller。 在URL方案的代码内,我有以下代码来呈现UIViewController
:
NSString *deviceType = [UIDevice currentDevice].model;
UIStoryboard *storyboard;
if([deviceType isEqualToString:@"iPhone"] || [deviceType isEqualToString:@"iPhone Simulator"])
{
storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
} else if([deviceType isEqualToString:@"iPad"] || [deviceType isEqualToString:@"iPad Simulator"])
{
storyboard = [UIStoryboard storyboardWithName:@"Storyboard-iPad" bundle:nil];
}
MainVC *viewController = [storyboard instantiateViewControllerWithIdentifier:@"MainVC"];
viewController.number = number;
viewController.url = YES;
UIViewController *activeController = [UIApplication sharedApplication].keyWindow.rootViewController;
if ([activeController isKindOfClass:[UINavigationController class]]) {
activeController = [(UINavigationController*) activeController visibleViewController];
}
[activeController presentModalViewController:viewController animated:YES];
首次通过url方案启动应用程序时,此方法可以正常工作。 但是,当应用程序在后台运行并通过url启动时,它将无法正常工作。 是什么原因造成的?
正如您所说的,它在第一次运行时有效,我想是因为您的根视图控制器是一个导航控制器,您似乎需要它。
但是,可以说,在使用应用程序期间,您几乎没有导航队列和演示新的视图控制器的队列。 因此,当您从应用程序进入后台时,顶视图控制器不是您想作为activeController
的根。
因此,在您的代码行中:
UIViewController *activeController = [UIApplication sharedApplication].keyWindow.rootViewController;
只是意味着您将访问根目录(队列中的第一个视图控制器),但是您需要最后一个视图控制器,以防在使用应用程序时出现一些演示或推送。
所以我认为这是两种方法:
因此,您应该考虑您的控制器,例如EXAMPLE堆栈。 因此,如果您的书籍堆积数量等于10,并且您想从第6本书开始展示新书,则需要先丢弃4本书,然后再放置新书。 或者,您只可以找到第10本书,然后将11本书放在10本书之上(这似乎是您的MainVC)。 也许这是一个粗糙的示例,但是您应该从可以显示新视图控制器的位置找到一个点,或者如果已经存在,则需要从队列中删除显示/推送的视图控制器。
希望对您有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.