1.应用跳转
- (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"); } }
2.应用跳转的Appdelegate代理
/** * 当被其他应用程序通过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; }
3.prepareForSegue控制器跳转
prepareForSegue show连接跳转。一定是控制器跳控制器,不能控件跳控制器
- (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; } }
时间: 2024-12-19 05:26:41