2015-05-16 47 views
0

我試圖通過URL方案呈現從AppDelegate的視圖控制器。對於URL方案的代碼中,我有以下代碼呈現UIViewController通過URL方案無法呈現視圖控制器

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方案推出,這工作正常。但是,當應用程序在後臺運行並且通過網址啓動時,它不起作用。這是什麼造成的?

+0

這是在'應用程序:didFinishLaunchingWithOptions:'方法? – arturdev

回答

0

正如你所說,它在第一次運行時起作用,我想這是因爲你的根視圖控制器是你需要的導航控制器。

但是讓我們假設,在使用應用程序時,您有幾個導航隊列和演示文稿新的視圖控制器。因此,當你從應用程序進入背景時,頂視圖控制器不是你認爲的activeController的根。

因此,在你的代碼行:

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

只是意味着你會進入到根(冷杉查看您的隊列控制器),但你需要最後一個視圖控制器的情況下,如果你有一些演示文稿或推送時使用的應用程序。

因此,這裏是因爲我認爲兩種方法:

  • 查找頂視圖控制器,並從中介紹。
  • 關閉一個queu /堆棧的控制器(如關閉它或彈出)並從您需要的角度呈現您的MainVC。

所以,你應該考慮一下你的控制器,例如 的例子。所以,如果你的書的堆棧數等於10,並且你想從第6本書出示新書,那麼你需要先放下4本頂級書籍,然後放置新書。或者你可以找到第10本書,並把10本書(這似乎是你的MainVC)11本書。也許這是一個粗略的例子,但是你應該從哪裏可以展示新的視圖控制器,或者如果它已經呈現,那麼你需要從隊列中移除呈現/推送的視圖控制器。

希望它能幫助你。