- (IBAction)openWangYi { // 1.获取application对象 UIApplication *app = [UIApplication sharedApplication]; // 2.建立须要打开的应用程序的URL // 在应用程序跳转中, 只要有协议头便可, 路径无关紧要 #warning 协议头在项目设置-info-URL Types设置 NSURL *url = [NSURL URLWithString:@"wangyi://"]; // 3.利用application打开URL if ([app canOpenURL:url]) { // 3.1判断是否能够打开 [app openURL:url]; }else { // 3.2打开App STORE下载 NSLog(@"根据App id打开App STORE"); } }
/** * 当被其余应用程序经过URL打开时就会调用 * * @param application 当前的应用程序 * @param url 打开当前程序的URL * * @return 是否成功处理 */ - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { // 1.获取首页控制器 UINavigationController *nav = (UINavigationController *)self.window.rootViewController; UIViewController *vc = nav.topViewController; NSLog(@"%@", url); // 判断是经过哪个URL打开的, 作出相应的处理(跳转到相应的控制器) NSString *urlStr = url.absoluteString; if ([urlStr hasPrefix:@"sina://login"]) { // 截取打开咱们程序的应用的scheme NSRange range = [urlStr rangeOfString:@"sina://login?myScheme="]; NSString *scheme = [urlStr substringFromIndex:range.length]; NSLog(@"跳转到受权界面AAAAAAAAA %@", scheme); // if ([vc isKindOfClass:[ViewController class]] == YES) { #warning 经过SB show跳转方法performSegueWithIdentifier,传送scheme [vc performSegueWithIdentifier:@"home2accounts" sender:scheme]; // } }else if ([urlStr hasPrefix:@"sina://view?id="]) { NSLog(@"跳转到详情界面BBBBBBBBBB"); [vc performSegueWithIdentifier:@"home2detail" sender:nil]; } return YES; } #warning iOS7以后的新方法 /** * 当被其余应用程序经过URL打开时就会调用(新方法) * * @param application 当前的应用程序 * @param url 打开当前程序的URL * @param sourceApplication 打开当前程序的Bundle identifier * @param annotation * * @return 是否成功处理 */ - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { #warning 注意: 若是实现了新方法, 旧方法旧失效了 /* sourceApplication用途: 当咱们作一些广告, 积分墙等推广的时候, 能够利用这个惟一表一记录当前程序是被哪个程序推广打开的 */ NSLog(@"%@ %@", url, sourceApplication); // 1.获取首页控制器 UINavigationController *nav = (UINavigationController *)self.window.rootViewController; UIViewController *vc = nav.topViewController; NSLog(@"%@", url); // 判断是经过哪个URL打开的, 作出相应的处理(跳转到相应的控制器) NSString *urlStr = url.absoluteString; if ([urlStr hasPrefix:@"sina://login"]) { // 截取打开咱们程序的应用的scheme NSRange range = [urlStr rangeOfString:@"sina://login?myScheme="]; NSString *scheme = [urlStr substringFromIndex:range.length]; NSLog(@"跳转到受权界面 %@", scheme); // if ([vc isKindOfClass:[ViewController class]] == YES) { [vc performSegueWithIdentifier:@"home2accounts" sender:scheme]; // } }else if ([urlStr hasPrefix:@"sina://view?id="]) { NSLog(@"跳转到详情界面"); [vc performSegueWithIdentifier:@"home2detail" sender:nil]; } return YES; }
prepareForSegue show链接跳转。必定是控制器跳控制器,不能控件跳控制器app
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSLog(@"首页 %@", sender); UIViewController *vc = segue.destinationViewController; if ([vc isKindOfClass:[TableViewController class]]) { // 若是跳转的目标控制器是受权,才须要设置Scheme TableViewController *tbVc = vc; tbVc.callScheme = sender; } }