IOS:使用 url 方案从浏览器启动应用程序时加载视图控制器?

Posted

技术标签:

【中文标题】IOS:使用 url 方案从浏览器启动应用程序时加载视图控制器?【英文标题】:IOS: Load a View Controller When App is Launched from Browser using url schemes? 【发布时间】:2014-01-24 05:49:24 【问题描述】:

我是 iPhone 开发的新手,我的应用程序基于视频会议,我有一个任务应该使用 URL 方案从浏览器启动应用程序。我已经做到了,但问题是当应用程序从浏览器启动时,它应该加载特定的视图控制器。我正在使用情节提要。这是我尝试过的代码。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

    if (!url)   return NO;
    

    NSString *URLString = [url absoluteString];
    [[NSUserDefaults standardUserDefaults] setObject:URLString forKey:@"url"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    URLParser *parser = [[URLParser alloc] initWithURLString:URLString];
     username = [parser valueForVariable:@"USERNAME"];
    NSLog(@"%@", username); //b
    sessid = [parser valueForVariable:@"SESSION_ID"];
    NSLog(@"%@", sessid); //(null)
    tokenid = [parser valueForVariable:@"token"];
    NSLog(@"%@", tokenid); //yes
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"VideoController"];

       return YES;

【问题讨论】:

你的故事板是基于导航控制器的吗?或标签栏控制器?问题是如何显示特定的 ViewController。就是这样。如果它是一个导航控制器,您可能想要推送 ViewController(您想要打开)。如果初始视图控制器是 tabbarcontroller,您可能需要更改 tabbbarcontroller 的 selectedIndex。 它基于导航控制器 【参考方案1】:

我就是这样做的..

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    //get parameters
    [self goResetPassword:dict];
    
    return YES;


- (void) goResetPassword:(NSDictionary*) dict
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UINavigationController *root = [[UINavigationController alloc]initWithRootViewController:[storyboard instantiateViewControllerWithIdentifier:@"resetPasswordView"]];
    self.window.rootViewController= root;
    ResetPasswordViewController *vc = (ResetPasswordViewController*)[[root viewControllers] objectAtIndex:0];
    [vc loadData:dict];

希望对您有所帮助... GL HF

【讨论】:

嘿,我试图通过另一个帖子联系您。我怎么跟你聊天?你让我发布关于分段控制器的问题的代码【参考方案2】:

根据您的评论,您的初始 ViewController 是 NavigationController。这样就可以推送所需的 ViewController。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

    // same code

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];

// Get instance of initial Viewcontroller from storyboard
UINavigationController *navController = [storyboard instantiateInitialViewController
];
// Get instance of desired viewcontroller
    ViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"VideoController"];
// Push ViewController on to NavigationController
[navController pushViewController:viewController  animated:NO];
       return YES;

【讨论】:

我按照你说的试过了。但是当我启动它时,它仍然只显示初始视图控制器。不去我想要的视图控制器 使用调试。你的 handleOpenURL 方法被调用了吗? S 之所以被调用是因为它会打印 USERNAME SESSION_ID 和令牌【参考方案3】:

检查一下

UIStoryboard *board             = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
UINavigationController *nav     = [[UINavigationController alloc] init];

[nav setNavigationBarHidden:NO];

IntroVC *initailView  = [board instantiateViewControllerWithIdentifier:@"Intro"];
[nav pushViewController:initailView animated:YES];
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
UIApplication *sharedApplication = [UIApplication sharedApplication];
[sharedApplication unregisterForRemoteNotifications];

【讨论】:

以上是关于IOS:使用 url 方案从浏览器启动应用程序时加载视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用程序剪辑可以从 url 启动吗?

在 iOS 上启动 BlueJeans 应用程序的 URL 方案?

从 iOS Safari 抓取 URL

iOS - 使用路线URL方案启动Yandex地图

iOS:从 facebook 启动应用程序

使用自定义 URL 方案的 iOS 无缝 Facebook 登录体验