2013-10-09 33 views
1

運行我已經安裝了我的應用程序自定義URL方案從故事板視圖,這是當應用程序沒有在後臺運行它是如何工作的:負載使用自定義URL方案,而應用程序在後臺

  • 自定義網址鏈接到達的電子郵件,在點擊帶來了從故事板
  • 登錄視圖一旦點擊登錄按鈕將取到您請求的選項卡控制器

到目前爲止好標籤。

這裏是我遇到的問題:

  • 如果我自定義URL鏈接再從電子郵件單擊當應用程序已經加載一次,它在後臺運行,它不會把登錄視圖再

我的問題是我需要做什麼加載登錄視圖時,我再次點擊自定義url鏈接。

自定義網址方案第一次完美工作,但不是當應用程序已經運行時。我試圖調試此...當我點擊自定義url方案鏈接「handleOpenURL:(NSURL *)url」方法在我的AppDelegate.m文件中調用,那麼我需要做什麼來從故事板再次加載登錄屏幕,以及如何我是否檢查登錄屏幕是否已經加載到內存中...登錄屏幕是我在故事板中的開始視圖,下面是handleOpenUrl函數在我的應用程序委託中的樣子。

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{ 
    if(!url){ 
     return NO; 

    } 
    // check if email link was clicked 
    if ([[url scheme] isEqualToString:@"docova"]) { 

     NSString *urlString = [url absoluteString]; 
     NSLog(@"URL Parameter string: %@", [url query]); 
     NSLog(@"incoming url => %@", urlString); 
     // NSArray *arrayQStrings=[self getDataOfQueryString:urlString]; 
     NSDictionary *dict = [self parseQueryString:[url query]]; 
     NSLog(@"query dict: %@", dict); 
     NSLog(@"query dict: %@", [dict valueForKey:@"action"]); 
     NSLog(@"query dict: %@", [dict valueForKey:@"docpath"]); 

     //[self.tabBarController setSelectedIndex:1]; // tab 3 
     //[self.parentViewController.tabBarController setSelectedIndex:1]; // tab 3 

     /* save user data ***/ 
     NSUserDefaults *appPrefs = [NSUserDefaults standardUserDefaults]; 
     [appPrefs setObject:[dict valueForKey:@"action"] forKey:@"action"]; // reset these after using it 
     [appPrefs setObject:[dict valueForKey:@"docpath"] forKey:@"docpath"]; // reset these after using it 

     // save data to application preference 
     [appPrefs synchronize]; 
     return YES; 

    } 

    return NO; 

} 

有人可以建議如何在應用程序已經運行時從故事板預先獲取視圖。我知道有活動棧在Android中,有沒有類似的東西在IOS以及...

回答

2

我能夠通過使用從mialkan的commnets來解決這一點,也必須改變handleOpenUrl方法(這是不建議使用)到「應用程序:的OpenURL:sourceApplication:註釋」,所以在我的OpenURL方法,我檢查特定行動,因此調用視圖,見下圖:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
loginView = [storyboard instantiateViewControllerWithIdentifier:@"SIDLoginViewController"]; 
self.window.rootViewController = loginView;     

感謝mialkan :)

+0

這幫我解決了我的問題。但是我有一個NavigationController作爲應用程序的第一響應者,並且爲了讓導航在我的第一個視圖中工作,我必須在Storyboard中的導航控制器上放置一個標識符,並加載_it_並將其設置爲rootViewController –

0

據我瞭解,你的界面生成器的結構是這樣

導航器 - >登錄 - 視圖 - 控制器 - >的TabBar控制器

當您的應用程序已經在後臺運行時,如果用戶通過郵件鏈接打開應用程序,您希望首先顯示登錄視圖?

你可以使用NSNotificationCenter來調用一個方法來彈出登錄視圖。

這是一個前。代碼來註冊你的通知並給它打電話。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popToLoginView:) name:@"popToLoginViewNotification" object:nil]; 

要通知方法。

[[NSNotificationCenter defaultCenter] postNotificationName:@"popToLoginViewNotification" object:nil]; 

如果你有TabbarController類把popToLoginView方法。或者tabbar的每個視圖控制器放popToLoginView方法。在查看當前視圖時是否使用此代碼

if (viewController.isViewLoaded && viewController.view.window) { 
// viewController is visible 
} 

然後彈出登錄視圖。

我希望這會有所幫助。

+0

mialkan,感謝您的快速反應。但我不確定是否需要使用「NSNotificationCenter」......我需要做的就是當有人點擊自定義URL鏈接時,能夠將我的故事板的開始屏幕作爲登錄屏幕顯示出來。當有人點擊自定義url鏈接時,如何將登錄屏幕(LoginViewController)從appDelegate放到最前面。日Thnx。 – DP2

+1

不客氣。我測試過,但我不知道項目,所以你可以嘗試這樣 - (BOOL)應用程序:(UIApplication *)應用程序handleOpenURL:(NSURL *)url UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@「MainStoryboard_iPhone」bundle:nil]; loginView = [storyboard instantiateViewControllerWithIdentifier:@「loginView」]; self.window.rootViewController = loginView; – mialkan

相關問題