iOS中 UIWebView加载网络数据 技术分享

简介:

直奔核心:

[objc]  view plain  copy
  1. #import "TechnologyDetailViewController.h"  
  2. #define kScreenWidth [UIScreen mainScreen].bounds.size.width  
  3. #define kScreenHeight [UIScreen mainScreen].bounds.size.height  
  4. @interface TechnologyDetailViewController ()  
  5. @property (nonatomic,retain)UIWebView *webView;//显示详情页面  
  6. @end  

[objc]  view plain  copy
  1. @implementation TechnologyDetailViewController  
  2. - (void)dealloc  
  3. {  
  4.     self.webView = nil;  
  5.     self.ids = nil;  
  6.     [super dealloc];  
  7. }  
  8.   
  9. - (void)viewDidLoad {  
  10.     [super viewDidLoad];  
  11.     //设置背景  
  12.     self.view.backgroundColor = [UIColor yellowColor];  
  13.     //调用请求网络数据  
  14.     [self readDataFromNetWork];  
  15.     //    self.automaticallyAdjustsScrollViewInsets = NO;  
  16.     [self.view addSubview:self.webView];  
  17. }  


懒加载UIWebView

[objc]  view plain  copy
  1. //懒加载  
  2. - (UIWebView *)webView{  
  3.     if (!_webView) {  
  4.         self.webView = [[[UIWebView alloc]initWithFrame:CGRectMake(0,0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]autorelease];  
  5.         self.webView.backgroundColor = [UIColor orangeColor];  
  6.           
  7.     }  
  8.     return [[_webView retain ]autorelease];  
  9. }  


核心代码如下:

[objc]  view plain  copy
  1. //解析数据  
  2. - (void)readDataFromNetWork{  
  3.     NSString *str = [NSString stringWithFormat:@"http://c.3g.163.com/nc/article/%@/full.html",self.ids];  
  4.     NSURL *url = [NSURL URLWithString:str];  
  5.     NSURLRequest *request = [NSURLRequest requestWithURL:url];  
  6.     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {  
  7.         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];  
  8.           
  9.           
  10.         NSString *body = dic[self.ids][@"body"];  
  11.         NSString * title = dic[self.ids][@"title"];  
  12.         NSString *digest = dic[self.ids][@"digest"];  
  13.         NSString *ptime = dic[self.ids][@"ptime"];  
  14.         NSString * source = dic[self.ids][@"source"];  
  15.         NSArray * img = dic[self.ids][@"img" ] ;  
  16.         //        NSLog(@"%@",img);  
  17.         if (img.count) {  
  18.             for (int i = 0; i < img.count; i ++) {  
  19.                   
  20.                   
  21.                 NSString *imgString = [NSString stringWithFormat:@"<p style=\"text-align:center\"><img src=\"%@\" /></p>",img[i][@"src"]];  
  22.                 NSLog(@"imString  = %@",imgString);  
  23.                   
  24.                 imgString = [imgString stringByReplacingOccurrencesOfString:@"<!--IMG#%d-->" withString:imgString];  
  25.                 body = [imgString stringByAppendingString:body];  
  26.                   
  27.                   
  28.             }  
  29.         }  
  30.         //        NSLog(@"body =  %@",body);  
  31.           
  32.         //借助第三方进行排版  
  33.         NSString *filePath = [[NSBundle mainBundle]pathForResource:@"topic_template" ofType:@"html"];  
  34.         NSString *htmlString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];  
  35.           
  36.         htmlString = [htmlString stringByReplacingOccurrencesOfString:@"__BODY__" withString:body];  
  37.         htmlString = [htmlString stringByReplacingOccurrencesOfString:@"__TITLE__" withString:title];  
  38.         htmlString = [htmlString stringByReplacingOccurrencesOfString:@"__AUTHOR__" withString:source];  
  39.         htmlString = [htmlString stringByReplacingOccurrencesOfString:@"__DIGEST__" withString:digest];  
  40.         htmlString = [htmlString stringByReplacingOccurrencesOfString:@"__TIME__" withString:ptime];  
  41.         htmlString = [htmlString stringByReplacingOccurrencesOfString:@"__PTIME__" withString:ptime];  
  42.         [self.webView loadHTMLString:htmlString baseURL:nil];  
  43.           
  44.           
  45.     }];  
  46.       
  47. }  


======================================================================================================

实在看不懂再看下demol例子:

UIWebView的loadRequest可以用来加载一个url地址,它需要一个NSURLRequest参数。我们定义一个方法用来加载url。在UIWebViewDemoViewController中定义下面方法:


[objc]  view plain  copy
  1. - (void)loadWebPageWithString:(NSString*)urlString  
  2. {  
  3.     NSURL *url =[NSURL URLWithString:urlString];  
  4.     NSLog(urlString);  
  5.     NSURLRequest *request =[NSURLRequest requestWithURL:url];  
  6.     [webView loadRequest:request];  
  7. }  


在界面上放置3个控件,一个textfield、一个button、一个uiwebview,布局如下:


在代码中定义相关的控件:webView用于展示网页、textField用于地址栏、activityIndicatorView用于加载的动画、buttonPress用于按钮的点击事件。


[objc]  view plain  copy
  1. @interface UIWebViewDemoViewController :UIViewController<UIWebViewDelegate> {     
  2.     IBOutlet UIWebView *webView;  
  3.     IBOutlet UITextField *textField;  
  4.     UIActivityIndicatorView *activityIndicatorView;  
  5.        
  6. }  
  7. - (IBAction)buttonPress:(id) sender;  
  8. - (void)loadWebPageWithString:(NSString*)urlString;  
  9. @end  


使用IB关联他们。

设置UIWebView,初始化UIActivityIndicatorView

[objc]  view plain  copy
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     webView.scalesPageToFit =YES;  
  5.     webView.delegate =self;  
  6.     activityIndicatorView = [[UIActivityIndicatorView alloc]   
  7.                              initWithFrame : CGRectMake(0.0f0.0f32.0f32.0f)] ;  
  8.     [activityIndicatorView setCenterself.view.center] ;  
  9.     [activityIndicatorView setActivityIndicatorViewStyle: UIActivityIndicatorViewStyleWhite] ;   
  10.     [self.view addSubview : activityIndicatorView] ;  
  11.     [self buttonPress:nil];  
  12.     // Do any additional setup after loading the view from its nib.  
  13. }  


UIWebView主要有下面几个委托方法:

1、- (void)webViewDidStartLoad:(UIWebView *)webView;开始加载的时候执行该方法。
2、- (void)webViewDidFinishLoad:(UIWebView *)webView;加载完成的时候执行该方法。
3、- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;加载出错的时候执行该方法。

我们可以将activityIndicatorView放置到前面两个委托方法中。

[objc]  view plain  copy
  1. - (void)webViewDidStartLoad:(UIWebView *)webView  
  2. {  
  3.     [activityIndicatorView startAnimating] ;  
  4. }  
  5. - (void)webViewDidFinishLoad:(UIWebView *)webView  
  6. {  
  7.     [activityIndicatorView stopAnimating];  
  8. }  


buttonPress方法很简单,调用我们开始定义好的loadWebPageWithString方法就行了:

[objc]  view plain  copy
  1. - (IBAction)buttonPress:(id) sender  
  2. {  
  3.     [textField resignFirstResponder];  
  4.     [self loadWebPageWithString:textField.text];  
  5.        
  6. }  


当请求页面出现错误的时候,我们给予提示:

[objc]  view plain  copy
  1. - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error  
  2. {  
  3.     UIAlertView *alterview = [[UIAlertView alloc] initWithTitle:@"" message:[error localizedDescription delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil nil];  
  4.     [alterview show];  
  5.     [alterview release];  
  6. }  


总结:本文通过实现一个简单的浏览器,说明了uiwebview的方法和属性,相信通过这个例子,应该明白uiwebview的使用了。

有疑问可通过新浪微博私信给我:http://weibo.com/hanjunqiang
相关文章
|
4天前
|
存储 安全 网络安全
云计算与网络安全:守护数据,构筑未来
在当今的信息化时代,云计算已成为推动技术革新的重要力量。然而,随之而来的网络安全问题也日益凸显。本文从云服务、网络安全和信息安全等技术领域展开,探讨了云计算在为生活带来便捷的同时,如何通过技术创新和策略实施来确保网络环境的安全性和数据的保密性。
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的魔法:如何用神经网络解锁数据的奥秘
在人工智能的璀璨星空中,深度学习犹如一颗最亮的星,它以其强大的数据处理能力,改变了我们对世界的认知方式。本文将深入浅出地介绍深度学习的核心概念、工作原理及其在不同领域的应用实例,让读者能够理解并欣赏到深度学习技术背后的奇妙和强大之处。
31 3
|
15天前
|
数据采集 存储 监控
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
本文探讨了如何利用 PHP 的 `set_time_limit()` 与爬虫工具的 `setTrafficLimit()` 方法,结合多线程和代理 IP 技术,高效稳定地抓取百度云盘的公开资源。通过设置脚本执行时间和流量限制,使用多线程提高抓取效率,并通过代理 IP 防止 IP 封禁,确保长时间稳定运行。文章还提供了示例代码,展示了如何具体实现这一过程,并加入了数据分类统计功能以监控抓取效果。
52 16
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
|
9天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习与神经网络:探索复杂数据的表示
【9月更文挑战第26天】深度学习作为人工智能领域的明珠,通过神经网络自动从大数据中提取高级特征,实现分类、回归等任务。本文介绍深度学习的基础、张量表示、非线性变换、反向传播及梯度下降算法,并探讨其在计算机视觉、自然语言处理等领域的应用与挑战。未来,深度学习将更加智能化,揭示数据背后的奥秘。
|
13天前
|
机器学习/深度学习 安全 网络安全
云端盾牌:云计算时代的网络安全守护在这个数字脉搏加速跳动的时代,云计算以其高效、灵活的特性,成为推动企业数字化转型的强劲引擎。然而,正如每枚硬币都有两面,云计算的广泛应用也同步放大了网络安全的风险敞口。本文旨在探讨云计算服务中网络安全的关键作用,以及如何构建一道坚不可摧的信息防线,确保数据的安全与隐私。
云计算作为信息技术领域的革新力量,正深刻改变着企业的运营模式和人们的生活。但在享受其带来的便利与效率的同时,云服务的安全问题不容忽视。从数据泄露到服务中断,每一个安全事件都可能给企业和个人带来难以估量的损失。因此,本文聚焦于云计算环境下的网络安全挑战,分析其根源,并提出有效的防护策略,旨在为云服务的安全使用提供指导和参考。
|
10天前
|
存储 安全 网络安全
云计算与网络安全:保护数据的关键策略
【9月更文挑战第23天】在数字化时代,云计算已成为企业和个人存储和处理数据的热门选择。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算环境下的网络安全挑战,并提出一系列保护数据的策略。我们将从云服务的基本概念出发,深入分析网络安全的重要性,并介绍如何通过技术和管理措施来增强云安全。文章的目的是为读者提供实用的指导,帮助他们在享受云计算便利的同时,确保数据的安全。
|
6天前
|
小程序 开发者
微信小程序之网络数据请求 wx:request的简单使用
这篇文章介绍了微信小程序中如何使用wx.request进行网络数据请求,包括请求的配置、请求的格式以及如何在开发阶段关闭请求的合法检验。
微信小程序之网络数据请求 wx:request的简单使用
|
6天前
|
缓存 网络协议 网络架构
网络抓包分析【IP,ICMP,ARP】以及 IP数据报,MAC帧,ICMP报和ARP报的数据报格式
本文详细介绍了如何使用网络抓包工具Wireshark进行网络抓包分析,包括以太网v2 MAC帧、IP数据报、ICMP报文和ARP报文的格式,以及不同网络通信的过程。文章通过抓包分析展示了IP数据报、ICMP数据报和ARP数据报的具体信息,包括MAC地址、IP地址、ICMP类型和代码、以及ARP的硬件类型、协议类型、操作类型等。通过这些分析,可以更好地理解网络协议的工作机制和数据传输过程。
网络抓包分析【IP,ICMP,ARP】以及 IP数据报,MAC帧,ICMP报和ARP报的数据报格式
|
7天前
|
存储 安全 网络安全
云计算与网络安全:保护数据的新挑战
【9月更文挑战第25天】在数字化时代,云计算已成为企业和个人存储和处理数据的关键技术。然而,随着云服务的普及,网络安全问题也日益突出。本文将探讨云计算中的网络安全问题,包括数据泄露、恶意软件攻击等,并提出相应的防护措施。我们将通过实例分析,展示如何在实际场景中应用这些防护措施,以保护数据安全。
下一篇
无影云桌面