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;
    }
}
相關文章
相關標籤/搜索