我正在尝试通过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启动时,它将无法正常工作。 是什么原因造成的?

===============>>#1 票数:0

正如您所说的,它在第一次运行时有效,我想是因为您的根视图控制器是一个导航控制器,您似乎需要它。

但是,可以说,在使用应用程序期间,您几乎没有导航队列和演示新的视图控制器的队列。 因此,当您从应用程序进入后台时,顶视图控制器不是您想作为activeController的根。

因此,在您的代码行中:

UIViewController *activeController = [UIApplication sharedApplication].keyWindow.rootViewController;

只是意味着您将访问根目录(队列中的第一个视图控制器),但是您需要最后一个视图控制器,以防在使用应用程序时出现一些演示或推送。

所以我认为这是两种方法:

  • 找到顶视图控制器并从中进行演示。
  • 关闭一个队列/控制器堆栈(例如将其关闭或弹出),然后从需要的位置显示MainVC。

因此,您应该考虑您的控制器,例如EXAMPLE堆栈。 因此,如果您的书籍堆积数量等于10,并且您想从第6本书开始展示新书,则需要先丢弃4本书,然后再放置新书。 或者,您只可以找到第10本书,然后将11本书放在10本书之上(这似乎是您的MainVC)。 也许这是一个粗糙的示例,但是您应该从可以显示新视图控制器的位置找到一个点,或者如果已经存在,则需要从队列中删除显示/推送的视图控制器。

希望对您有帮助。

  ask by user4486205 translate from so

未解决问题?本站智能推荐:

2回复

在URL方案OpenURL之后从AppDelegate调用ViewController方法

我试图从AppDelegate.m调用ViewController.m中的函数LoadWebpage 。 我已经使用URL方案启用了我的应用程序,以便Safari中的“urlscheme://?querystring”链接打开我的应用程序。 我正在AppDelegate中捕获url方案(
2回复

以编程方式显示ViewController时无法加载NavigationBar

我试图从另一个( ViewController )加载一个导航控制器( BasicSearchController )。 在情节提要中,我创建了2个导航控制器,它们不是通过segue链接的,而是单独的Nagivation控制器。 每个视图分别链接到ViewController和BasicSe
3回复

在点击通知时无法正确显示ViewController

我正在使用Objective-C 。 我想呈现一个infoViewController其中包含来自通知的内容。 这是我的代码: 目前我infoViewController由rootViewController 。 但是,如果应用程序不在rootViewController时进入
2回复

将URL从ViewController 1中的UIWebView 1传递到ViewController 2中的UIWebView 2

我的第一个ViewController中有UIWebView,我希望如果用户单击UIWebView 1内的任何链接,则应打开新的ViewController(例如InfoViewController)并将URL传递到InfoViewController内的新UIWebView。 编辑:
1回复

UIModalTransitionStylePartialCurl不显示viewController

我正在尝试在viewController上实现UIModalTransitionStylePartialCurl,以呈现ViewController2的局部视图(我正在将xCode 4.6与storyBoards一起用于通用应用程序)。 以下代码会为UIModalTransitionStyle
2回复

如何根据结果显示ViewController

我从iOS开始,我怀疑,当我们有一个ViewController并有另外4个ViewController时,哪一种是最佳实践,并且根据结果,我们想根据结果打开一个视图?
2回复

在ContainerView中显示ViewController

我正在尝试在ContainerView中显示ViewController。 如果使用内部ViewController(与ContainerView在同一项目中的源代码),它将按预期工作。 所以我在另一个项目中使用ViewController,因此不会显示。 我已经在外部ViewContro
2回复

在ViewController上显示SVProgressHUD?

我在AppDelegate中使用了Web服务。 但是我想在初始视图控制器(View Controller)上显示SVProgressHUD,并且当Web Service完成时,然后在View Controller中隐藏SVProgressHUD。
2回复

显示顶部ViewController

我正在读取包含40多个ViewController的应用程序的代码。 您怎么知道哪个是当前的ViewController。 我尝试过的 CBIntrospect:执行一条带有消息的UIAlertView : NSStringFromClass([self class])吗?
2回复

显示另一个ViewController

请帮帮我。 在解除现有控制器之后,如何显示另一个视图控制器? 这是我的代码: 我的代码不起作用。 请帮帮我。 如果我在解除了ModellViewController之后编写了NSLog,它会向我显示NSLog,但是ViewController不会显示。 谢谢