- (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; } }