iOS-应用跳转

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链接跳转。必定是控制器跳控制器,不能控件跳控制器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;
    }
}
相关文章
相关标签/搜索