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 方案从浏览器启动应用程序时加载视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章