簡體   English   中英

應用在后台運行時,使用自定義網址方案從情節提要中加載視圖

[英]load a view from storyboard using custom url scheme while app is running in background

我為我的應用程序設置了自定義網址方案,這是當應用程序不在后台運行時它的工作方式:

  • 自定義url鏈接以電子郵件的形式到達,單擊即可從情節提要中獲取登錄視圖
  • 單擊登錄按鈕后,將轉到選項卡控制器中的所需選項卡

到現在為止還挺好。

這是我遇到的問題:

  • 如果我再次從電子郵件中單擊自定義URL鏈接,則在應用程序已經加載一次並在后台運行時,它不會再次顯示登錄視圖

我的問題是,當我多次單擊自定義URL鏈接時,我需要做些什么來再次加載登錄視圖。

自定義url方案在第一次運行時效果很好,但在應用程序已經運行時卻無法運行。 我嘗試調試此問題……當我單擊自定義url方案鏈接時,在AppDelegate.m文件中調用了“ handleOpenURL:(NSURL *)url”方法,因此該怎么做才能再次從情節提要中加載登錄屏幕,以及如何如何檢查登錄屏幕是否已加載到內存中?登錄屏幕是我在情節提要中的開始視圖,以下是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中也有類似的東西...

我能夠使用mialkan的commnets來解決此問題,還必須將handleOpenUrl方法(不建議使用)更改為“ application:openURL:sourceApplication:annotation”,因此在我的openUrl方法中,我檢查特定的操作並調用了相應地查看,請參見以下內容:

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

謝謝mialkan :)

據我了解,您的界面構建器結構如下

導航控制器->登錄視圖控制器->標簽欄控制器

當您的應用程序已經在后台運行時,如果用戶通過郵件鏈接打開該應用程序,您想先顯示登錄視圖嗎?

您可以使用NSNotificationCenter調用一種方法以彈出“登錄”視圖。

這是前 代碼來注冊和調用您的通知。

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

通知方法。

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

如果您具有TabbarController類,請放置popToLoginView方法。 popToLoginView每個視圖控制器都放置popToLoginView方法。 在視圖中檢查其當前視圖是否與此代碼

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

然后彈出進入登錄視圖。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM