跳转界面 push 展示网页

1.Safari :

openURL:自带很多功能 (进度条,刷新,前进,倒退..)就是打开了一个浏览器,跳出自己的应用

2.UIWebView:

没有功能,在当前应用中打开网页,自己去实现某些功能,但不能实现进度条功能(有些软件做了假进度条,故意卡到70%不动,加载完成前秒到100%)

3.SFSafariViewController:

iOS9+ 专门用来展示网页 需求:既想要在当前应用展示网页,又想要safari功能

需要导入#import 框架

#pragma mark - UICollectionViewDelegate

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ // 小盒子的点击事件

BQLog(@"%@",indexPath);

// 跳转界面 push 展示网页

/*

1.Safari openURL:自带很多功能 (进度条,刷新,前进,倒退..)就是打开了一个浏览器,跳出自己的应用

2.UIWebView:没有功能,在当前应用中打开网页,自己去实现某些功能,但不能实现进度条功能

3.SFSafariViewController:iOS9+ 专门用来展示网页 需求:既想要在当前应用展示网页,又想要safari功能

需要导入#import 框架

4.WKWebView:iOS8+ (UIWebView升级版本)添加功能:1)监听进度条 2)缓存

*/

BQSquareItem *item = self.squareItems[indexPath.row];

if (![item.url containsString:@"http"]) {

return;

}

SFSafariViewController *safariVc = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:item.url]];

// safariVc.delegate = self;

// self.navigationController.navigationBarHidden = YES;

// [self.navigationController pushViewController:safariVc animated:YES];

[self presentViewController:safariVc animated:YES completion:nil]; // 推荐使用modal自动处理 而不是push

}

4.WKWebView:

iOS8+ (UIWebView升级版本)添加功能:1)监听进度条 2)缓存

需要手动导入WebKit框架 编译器默认不会导入

- (void)viewDidLoad {

[super viewDidLoad];

// 添加WebView

WKWebView *webView = [[WKWebView alloc] init];

_webView = webView;

[self.contentView addSubview:webView];

// 加载网页

NSURLRequest *request = [NSURLRequest requestWithURL:self.url];

[webView loadRequest:request];

// KVO监听属性改变

/*

KVO使用:

addObserver:观察者

forKeyPath:观察webview哪个属性

options:NSKeyValueObservingOptionNew观察新值改变

注意点:对象销毁前 一定要记得移除 -dealloc

*/

[webView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:nil];

[webView addObserver:self forKeyPath:@"canGoForward" options:NSKeyValueObservingOptionNew context:nil];

[webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil];

// 进度条

[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];

}

- (void)viewDidLayoutSubviews{

[super viewDidLayoutSubviews];

_webView.frame = self.contentView.bounds;

}

#pragma mark - KVO

// 只要观察者有新值改变就会调用

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

self.backItem.enabled = self.webView.canGoBack;

self.forwardItem.enabled = self.webView.canGoForward;

self.title = self.webView.title;

self.progressView.progress = self.webView.estimatedProgress;

self.progressView.hidden = self.webView.estimatedProgress>=1;

}

- (void)dealloc {

[self.webView removeObserver:self forKeyPath:@"canGoBack"];

[self.webView removeObserver:self forKeyPath:@"canGoForward"];

[self.webView removeObserver:self forKeyPath:@"title"];

[self.webView removeObserver:self forKeyPath:@"estimatedProgress"];

}

#pragma mark - 按钮的点击事件

- (IBAction)goBack:(id)sender { // 回退

[self.webView goBack];

}

- (IBAction)goForward:(id)sender { // 前进

[self.webView goForward];

}

- (IBAction)reload:(id)sender { //刷新

[self.webView reload];

}

ios开发跳转safari_iOS 跳转网页的四种方法相关推荐

  1. vba打开html文件,vba打开网页的四种方法

    内容提要:文章介绍在excel中vba打开网页的四种方法,分别使用API.SHELL函数.FollowHyperlink方法."InternetExplorer"对象来实现. Q: ...

  2. IOS开发笔记之推广安装(用网页判断是否安装App)

    IOS开发笔记之推广安装(用网页判断是否安装App) 在做App推广的时候,我们经常会用到网页链接下载,亦或是一张二维码,最常见的做法就是将App在iTunes中的下载链接嵌入,当用户扫描或者点击网页 ...

  3. vue 路由跳转页面打开新页面_vue-router跳转时打开新页面的两种方法

    vue-router跳转时打开新页面的两种方法 最近还是在痛苦的挣扎中 挣扎吧 记录一下在vue项目中如何实现跳转到一个新页面(一个比较简单又比较基础的问题了),有两个方法: 1.标签实现新窗口打开 ...

  4. php页面跳转的方法,PHP实现页面跳转的四种方法

    PHP实现页面跳转的四种方法 发布时间:2020-05-20 11:36:01 来源:亿速云 阅读:172 作者:Leah 今天小编就为大家分享PHP实现页面跳转的四种方法.小编觉得挺实用的,为此分享 ...

  5. 路由跳转四种方法(带参)

    路由跳转四种方法(带参) 方式1.router-link 1. 不带参数<router-link :to="{name:'home'}"> <router-lin ...

  6. 在HTML中使用CSS美化网页的三种方法

    在HTML中使用CSS美化网页的三种方法 CSS是Cascading Style Sheets(级联样式表)的缩写,CSS是一种样式表语言,用于为HTML文档定义布局.例如,CSS涉及字体.颜色.边距 ...

  7. IOS中Json解析的四种方法

    2019独角兽企业重金招聘Python工程师标准>>> 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此& ...

  8. 怎么在python下载网站内容-Python下载网页的几种方法

    get和post方式总结 get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在 ...

  9. 【转】IOS中Json解析的四种方法

    原文网址:http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有 ...

最新文章

  1. 让VSCode的快捷键切换为WebStorm/IDEA的快捷键、修改颜色主题(深色模式)、文件图标主题
  2. [WCF] - Odata Service 访问失败,查看具体错误信息的方法
  3. 情境感知技术是什么?
  4. 最快删除大量文件的方法
  5. 原生Js封装的弹出框-弹出窗口-页面居中-多状态可选
  6. 日期setHours()方法以及JavaScript中的示例
  7. sql server中select语句需要申请的锁
  8. 在HTML中添加图片阴影,html – 如何在CSS中为图像添加内部阴影[复制]
  9. 从JS库的使用者转变成JS的开发者——第一篇 javascript对象
  10. 计算机网络简单理解总结
  11. ftp服务器要什么配置文件,ftp服务器要求什么电脑配置
  12. 解决WIN10“系统和压缩内存”“ntoskrnl.exe”系统空闲时占用大量CPU
  13. Onetab快速删除所有历史网页
  14. gbk编解码器无法解码的问题,有可能出题出在文件名上
  15. PostgreSQL 技术文档
  16. 北京市中小学信息学竞赛汇总
  17. CoppeliaSim+ROS2+Windows愉快玩耍(回顾Webots)
  18. 超简单lua (LOL)
  19. 紫光云数(新华三)面试经历(垃圾)
  20. QQ图片回复变色:从制作到发送

热门文章

  1. 领扣-1/167 两数之和 Two Sum MD
  2. 第123天:移动web开发中的常见问题
  3. 系统运维tips 3 之 innodb
  4. 我两年的坚持,值了!
  5. 如何去除字符串中的 “\n“ ?80% 的同学错了!
  6. 对称加密算法-DES以及DESede算法
  7. 好的可视化报告一目了然,丑的可视化报表一文不值
  8. 老板眼中理想的“数据中台”,是不是真的存在?
  9. 继续完善掼蛋游戏 其次说说朋友的情况
  10. 哥哥被我打哭了的飞鸽传书