1

我已经为我的应用程序设置了一个自定义 url 方案,这就是应用程序不在后台运行时的工作方式:

  • 自定义 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中是否也有类似的东西......

4

2 回答 2

2

我能够通过使用 mialkan 的 commnets 来解决这个问题,并且还必须将 handleOpenUrl 方法(已弃用)更改为“application:openURL:sourceApplication:annotation”,因此在我的 openUrl 方法中,我检查了具体操作并调用了相应地查看,见下文:

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

谢谢迈尔坎 :)

于 2013-10-11T12:26:10.080 回答
0

据我了解,您的界面构建器结构如下

导航控制器 -> 登录视图控制器 -> 标签栏控制器

当您的应用程序已经在后台运行时,如果用户通过邮件链接打开应用程序,您希望首先显示登录视图?

您可以使用NSNotificationCenter调用方法弹出到登录视图。

这是一个前任。注册您的通知并调用它的代码。

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

通知方法。

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

如果你有 TabbarController 类 putpopToLoginView方法。或者tabbar putpopToLoginView方法的每个视图控制器。在视图中检查其当前视图,使用此代码

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

然后弹出登录视图。

我希望这有帮助。

于 2013-10-09T06:01:03.743 回答