文档章节

iOS-应用跳转

Ethan-GOGO
 Ethan-GOGO
发布于 2015/10/16 21:45
字数 655
阅读 83
收藏 1

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



© 著作权归作者所有

共有 人打赏支持
上一篇: iOS-应用分享
下一篇: Quartz2D
Ethan-GOGO
粉丝 13
博文 174
码字总数 82033
作品 0
广州
私信 提问
iOS与JS交互之WKWebView-协议拦截

级别:★★☆☆☆ 标签:「iOS与JS交互」「WKWebView与JS交互」「WKWebView拦截协议」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
2018/09/01
0
0
Android-微信浏览器/qq浏览器内如何实现调用并打开手机第三方应用?

背景: 公司app有个需求,分享的新闻链接能用自己的app打开浏览,未安装时引导用户安装; 平台:android/ios; 分享SDK:友盟社会化分享SDK 目前方案: android客户端使用intent-filter过滤设...

清风烈酒-
2015/05/13
12.3K
2
开发者福利:iOS开发学习资源、解决方案大放送

百度iOS入门教程http://wenku.baidu.com/course/view/1ce3571252d380eb62946d8c M了个J博客 http://www.cnblogs.com/mjios/tag/objective-c/ iOS应用源码保护:http://www.ijiami.cn/ios Co......

拉偶有所依
2014/12/09
797
9
Vue开发微信H5 微信分享签名失败问题解决方案

关于Vue中路由使用history模式,开发微信H5页面分享时在安卓上签名有效成功,但是在IOS设备上一直报错签名失效问题 问题描述:在Vue开发过程中,路由使用History模式下,在使用微信分享时,在...

golddemon
2018/08/08
0
0
RN与原生交互(一)——基本页面跳转

React Native(以下简称RN)开发app过程中大部分都可以在JS端完成,但是也有一些功能是需要原生端来完成的。这时RN与原生端就不可避免的需要进行交互,比如页面跳转和数据传递。本篇文章主要以...

不變旋律
2018/06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在React工程中使用JavaScript Barcode SDK创建Web条形码应用

基于WebAssembly构建的Dynamsoft JavaScript Barcode SDK让Web开发者能够创建适用于浏览器的高性能条码应用。这篇文章分享下如何使用React快速创建一个简单的Web条形码扫描应用。 下载 Node...

yushulx
28分钟前
1
0
java lambda笔记

c#中的lambda表达式简直不要太爽,但是感觉java的lambda和c#比有待继续提高。 先搞个筛选List集合的东西,我们先搞个集合玩玩。 List<Person> person = new ArrayList<Person>();Person p...

朝如青丝暮成雪
28分钟前
0
0
最严新规发布 网络短视频平台该如何降低违规风险?

1月9日中国网络视听节目服务协会对外正式发布了多项规范,对版权视频保护及违规内容,都进行了更加详细的标准制定,整体政策更加严格。 规范规定,网络短视频平台应当履行版权保护责任,不得...

阿里云官方博客
37分钟前
1
0
深入解读阿里云数据库POLARDB核心功能物理复制技术

日志是数据库的重要组成部份,按顺序以增量的方式记录了数据库上所有的操作,日志模块的设计对于数据库的可靠性、稳定性和性能都非常重要。 可靠性方面,在有一个数据文件的基础全量备份后,...

zhaowei121
43分钟前
1
0
CentOS 非root 用户 使用sudo 命令免密码

1. 使用su/su - 命令进入root权限下; 2. 给/etc/sudoers文件添加写权限 chmod u+w /etc/sudoers 3.找到“root ALL=(ALL) ALL ”,在后面添加:"dba ALL=(ALL) NOPASSWD: ALL" 4.保存退出,并......

驛路梨花醉美
43分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部