iOS 网络

本文详细介绍了iOS应用中UIWebView组件的使用方法,包括如何加载本地与网络资源,以及如何与网页进行交互。通过实例演示了如何在请求中加载HTML内容并操作页面元素,同时讲解了不同类型的网络请求方法及其应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、webView 
UIwebView是iOS中内置的浏览器控件。除了能够加载网络资源外,也可以加载本地资源,目前支持的常用的文档格式:html、pdf、docx、txt等。
1.获取页面
     1.创建request请求
          将要访问的地址保存在字符串url中
           NSString *url = [ Url stringByReplacingOccurrencesOfString : @"CLIENT_ID" withString : AppKey ];
    将字符串转换为request请求
    NSURLRequest *request = [[ NSURLRequest alloc ] initWithURL :url];
     2.加载请求页面
    [ _webview loadRequest :request ];

在viewController中添加webView,在该webView上增加UISearchBar,获取地址后展现结果:
在这个浏览器中将实现这样几个功能:
1.如果输入以”file://”开头的地址将加载Bundle中的文件
2.如果输入以“http”开头的地址将加载网络资源
实现效果:


2.与页面交互
目前网站及软件都是3端鼎力:web端,iOS端,android端。3端分别开发代码,大大增加工作量,此时就可以在客户端复用web端html5的代码。在客户端加载html5页面展示后,需要在客户端完成与html5的交互。
UIWebView与页面的交互主要体现在两方面:使用ObjC方法进行页面操作、在页面中调用ObjC方法两部分。和其他移动操作系统不同,iOS中所有的交互都集中于一个 stringByEvaluatingJavaScriptFromString:方法中,以此来简化开发过程。

UIWebView与页面交互

UIWebView与页面的交互主要体现在两方面:使用ObjC方法进行页面操作、在页面中调用ObjC方法两部分。和其他移动操作系统不同,iOS中所有的交互都集中于一个stringByEvaluatingJavaScriptFromString:方法中,以此来简化开发过程。

在iOS中操作页面


1.首先在request方法中使用loadHTMLString:加载了html内容,当然你也可以将html放到bundle或沙盒中读取并且加载。

-( void)request{   
    NSString *htmlStr=@ "<html>\ <head><title>Amanda's Blog</title></head>\ <body style=\"color:#0092FF;\">\ <h1 id=\"header\">I am HuoDaJie</h1>\ <p>iOS 开发</p>\ </body></html>";        
  [_webView loadHTMLString:htmlStr baseURL:nil];
}

2.然后在webViewDidFinishLoad:代理方法中通过 stringByEvaluatingJavaScriptFromString: 方法可以操作页面中的元素,例如在下面的方法中读取了页面标题、修改了其中的内容。

-( void)webViewDidFinishLoad:(UIWebView *)webView{   
    [UIApplication sharedApplication].networkActivityIndicatorVisible= false;   
   NSLog(@ "%@",[_webView stringByEvaluatingJavaScriptFromString:@ "document.title"]);   
   NSLog(@ "%@",[_webView stringByEvaluatingJavaScriptFromString:@ "document.getElementById('header').innerHTML=‘Amanda's Blog'"]); }

实现效果:
我们可以看到:html页面中header由 I am HuoDaJie 变为Amanda 's Blog


二、viewController中web请求和响应


在Web开发中主要的请求方法有如下几种:
GET请求:get是获取数据的意思,数据以明文在URL中传递,受限于URL长度。
POST请求:post是向服务器提交数据的意思,提交的数据以实际内容形式存放到消息头中进行传递,无法在浏览器url中查看到,大小没有限制。
HEAD请求:请求头信息,并不返回请求数据体,而只返回请求头信息,常用用于在文件下载中取得文件大小、类型等信息。


例如我想制作一个微博客户端,首页显示新的微博。客户端需要访问服务器端的接口 https://api.weibo.com/2/statuses/friends_timeline.json?access_token=ACCESS_TOKEN来获取展示的微博信息。



网络请求需要依赖以下几个对象:

NSURLRequest:建立了一个请求,可以指定缓存策略、超时时间等参数。
NSMutableURLRequest,如果请求定义为NSMutableURLRequest则可以指定请求方法(GET或POST)等信息。
NSURLConnection:用于发送请求,可以指定请求和代理。

如果请求不设置请求方法,默认为Get请求,所以Get请求可以直接使用NSURLRequest,而POST请求只能使用NSMutableURLRequest。

Get请求

NSString *url = [[ NSString alloc ] initWithFormat : @"%s?access_token=%@&page=%d" , HomeUrl , _Access_token , _page ];
NSURL *HomeDataUrl =[[NSURL alloc] initWithString:url];
NSData *data = [[NSData alloc] initWithContentsOfURL:HomeDataUrl];

post请求

NSString * body = [[ NSString alloc ] initWithFormat : @"access_token=%@&comment=%@&id=%@" , _access_token , _commentText . text , _Tid ];
NSString *encodingString = ( NSString *) CFBridgingRelease ( CFURLCreateStringByAddingPercentEscapes ( kCFAllocatorDefault , ( CFStringRef ) body, ( CFStringRef ) @"&%" , nil , kCFStringEncodingUTF8 ));
NSData *bodydata =[encodingString dataUsingEncoding : NSUTF8StringEncoding ];
//post请求的地址
NSMutableURLRequest * request = [[ NSMutableURLRequest alloc ] initWithURL :[[ NSURL alloc ] initWithString :@ CommentUrl ]];
//设置请求方法为POST
[request setHTTPMethod : @"POST" ];
//设置请求体(请求的参数)
[request setHTTPBody:bodydata];
NSData *data =[ NSURLConnection sendSynchronousRequest :request returningResponse : nil error : nil ];

NSURLConnection方法有两个方法

+ (void)sendAsynchronousRequest:request: queue:queue:completionHandler:发送一个异步请求 


+ (NSData *)sendSynchronousRequest: returningResponse: error:发送一个同步请求 

同步请求:前端页面一直等待返回数据不能做其他事情
异步请求:前端页面可以做其他事情,等到异步请求返回数据后再做处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值