网页视图控件:UIWebView

功能:它是继承于UIView的,是一个内置的浏览器控件,以用来浏览从网络下载下来的网页或者本地上加载下来的文档。

枚举:
//网页视图导航类型
typedef NS_ENUM(NSInteger, UIWebViewNavigationType) {

UIWebViewNavigationTypeLinkClicked,             //用户点击了一个链接

UIWebViewNavigationTypeFormSubmitted,        //用户提交了一个表单

UIWebViewNavigationTypeBackForward,          //用户触击前进或返回按钮

UIWebViewNavigationTypeReload,                  //用户触击重新加载按钮

UIWebViewNavigationTypeFormResubmitted,    //用户重复提交表单

UIWebViewNavigationTypeOther                    //发生其他行为类型

};

//网页超过view大小时,超出部分翻页布局模式

typedef NS_ENUM(NSInteger, UIWebPaginationMode) {

UIWebPaginationModeUnpaginated,     //不使用翻页

UIWebPaginationModeLeftToRight,      //从左到右

UIWebPaginationModeTopToBottom,    //从顶部到底部

UIWebPaginationModeBottomToTop,   //从底部到顶部

UIWebPaginationModeRightToLeft      //从右到左

};

//枚举webView加载页面具有CSS属性时是使用页的样式还是以列的样式

typedef NS_ENUM(NSInteger, UIWebPaginationBreakingMode) {

UIWebPaginationBreakingModePage,   //页模式

UIWebPaginationBreakingModeColumn //列模式

};

@interface UIWebView : UIView <NSCoding, UIScrollViewDelegate>

属性:

//代理

@property (nonatomic, assign) id <UIWebViewDelegate> delegate;

//内置滚动视图

@property (nonatomic, readonly, retain) UIScrollView *scrollView;

//是否可以返回上一级

@property (nonatomic, readonly, getter=canGoBack) BOOL canGoBack;

//是否可以跳转到下一级

@property (nonatomic, readonly, getter=canGoForward) BOOL canGoForward;

//是否加载

@property (nonatomic, readonly, getter=isLoading) BOOL loading;

//是否缩放页面到合适大小

@property (nonatomic) BOOL scalesPageToFit;

//是否发现电话号码

@property nonatomic) BOOL detectsPhoneNumbers;

//数据链接类型,如邮箱、电话、地址等

@property (nonatomic) UIDataDetectorTypes dataDetectorTypes ;

//是否允许内置媒体播放

@property (nonatomic) BOOL allowsInlineMediaPlayback;

//媒体视频是否自动播放

@property (nonatomic) BOOL mediaPlaybackRequiresUserAction ;

//媒体音频是否支持airplay

@property (nonatomic) BOOL mediaPlaybackAllowsAirPlay ;

//是否将数据加载如内存后渲染界面

@property (nonatomic) BOOL suppressesIncrementalRendering ;

//是否设置用户交互

@property (nonatomic) BOOL keyboardDisplayRequiresUserAction;

//超出视图的网页翻页模式

@property (nonatomic) UIWebPaginationMode paginationMode ;

//翻页断开模式

@property (nonatomic) UIWebPaginationBreakingMode paginationBreakingMode ;

//网页长度

@property (nonatomic) CGFloat pageLength ;

//网页分页之间的间隔

@property (nonatomic) CGFloat gapBetweenPages ;

//网页分页数量

@property (nonatomic, readonly) NSUInteger pageCount ;

方法:

//通过远程URL加载网页(加载网页数据:第一种方式)

- (void)loadRequest:(NSURLRequest *)request;

//根据设置的URL路径,加载html文件中引用的图片等素材,html转为字符串(加载网页数据:第二种方式)

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;

//data为文件数据, MIMEType为文件类型 ,textEncodingName为编码类型,baseUrl为素材路径(加载网页数据:第三种方式)

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;

//重新加载

- (void)reload;

//停止加载

- (void)stopLoading;

//返回上一级

- (void)goBack;

//跳转下一级

- (void)goForward;

//通过javascript操作网页数据

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

协议:

@protocol UIWebViewDelegate <NSObject>

@optional

//准备加载内容时调用的方法,通过返回值来进行是否加载的设置

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

//开始加载时调用的方法

- (void)webViewDidStartLoad:(UIWebView *)webView;

//完成加载时调用的方法

- (void)webViewDidFinishLoad:(UIWebView *)webView;

//加载失败时调用的方法

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

@end

具体实例如下:

1.布局故事板,在控制器视图中拖入三个控件,分别是网页视图控件UIWebView、文本框控件UITextField、活动指示器视图控件

UIActivityIndicatorView、按钮控件UIButton。

 

2、将这三个控件分别关联到控制器类中,即IBOutLet关联,同时让控制器类实现网页视图协议和警告框协议(后面用警告框显示加载失败)。

3、为按钮控件关联动作事件IBAction。

4、下面就是具体的代码实现了:

<1>在-(void)viewDidLoad方法中设置控件的相关属性

- (void)viewDidLoad {
[super viewDidLoad]; //设置文本框成为第一响应者
[self.textField becomeFirstResponder]; //让网页自适应大小
self.webView.scalesPageToFit = YES; //设置网页视图代理
self.webView.delegate = self; //设置活动指示器视图
self.activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
self.activityIndicator.color = [UIColor redColor];
self.activityIndicator.center = self.view.center;
self.activityIndicator.hidden = YES;
}

<2>#pragma mark -按钮事件(调用加载网页的方法,传递链接)

- (IBAction)transLink:(UIButton *)sender
{
//注销文本框的第一响应者身份
[self.textField resignFirstResponder]; //隐藏指示器视图
self.activityIndicator.hidden = NO; //加载网页
[self loadWebByLink:self.textField.text];
}

<3>根据参数链接加载网页

-(void)loadWebByLink:(NSString *)weblink
{
//获取链接
NSURL *URL = [NSURL URLWithString:weblink]; //创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:URL]; //加载网页
[self.webView loadRequest:request];
}

<4>#pragma mark -<UIWebViewDelegate>实现一些可选的网页视图控件的协议方法

//准备加载内容时调用的方法,通过返回值来进行是否加载的设置
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
return YES;
} //开始加载时启动活动指示器刷新
-(void)webViewDidStartLoad:(UIWebView *)webView
{
[self.activityIndicator startAnimating];
} //完成加载时结束活动指示器刷新
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
[self.activityIndicator stopAnimating];
} //加载失败时弹出一个警告框
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
UIActionSheet *action = [[UIActionSheet alloc]initWithTitle:[error localizedDescription] delegate:nil cancelButtonTitle:@"确认" destructiveButtonTitle:nil otherButtonTitles:nil, nil];

//设置警告框视图代理
action.delegate = self; //显示警告框
[action showInView:self.view];
}

<5>#pragma mark -<UIActionSheet>警告框视图协议

//点击"确认"时,隐藏活动指示器
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
[self.activityIndicator stopAnimating];
self.activityIndicator.hidesWhenStopped = YES;
}

5、演示结果如下:

开始时:                                                                       输入链接点击GO时:

    

输入错误链接失败时:                                     点击确认,取消警告框时:

     

重新输入正确链接时:

 

iOS:网页视图控件UIWebView的详解的更多相关文章

  1. 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)

    1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...

  2. iOS:提示框(警告框)控件UIActionSheet的详解

    提示框(警告框)控件2:UIActionSheet 功能:当点击按钮或标签等时,弹出一个提示框,显示必要的提示,然后通过添加的按钮完成需要的功能.它与导航栏类似,它继承自UIView.   风格类型: ...

  3. iOS:选择器控件UIPickerView的详解和演示

    选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据.例如创建日历.字体表(类型.大小.颜色).图库等. ...

  4. iOS:提示框(警告框)控件UIAlertView的详解

    提示框(警告框)控件:UIAlertView   功能:当点击按钮或标签等时,弹出一个提示框,显示必要的提示,然后通过添加的按钮完成需要的功能.   类型:typedef NS_ENUM(NSInte ...

  5. iOS:下拉刷新控件UIRefreshControl的详解

    下拉刷新控件:UIRefreshControl 1.具体类信息: @interface UIRefreshControl : UIControl //继承控制类 - (instancetype)ini ...

  6. iOS:图像选取器控制器控件UIImagePickerController的详解

    图像选择控制器:UIImagePickerController 功能:用于选取相册或相机等里面的照片. @interface UIImagePickerController : UINavigatio ...

  7. 《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)

    1.简介 我们在实际工作中,有可能遇到有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据.网页上日历控件一般,是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期.这 ...

  8. AnyCAD三维控件场景节点详解

    SceneNode是AnyCAD三维图形平台的AnyViz显示引擎的核心对象之一,只有放在场景管理器(SceneManager)里的节点才能被显示引擎所显示. 1.   节点分类 SceneNode是 ...

  9. delphi控件属性大全-详解-简介

    http://blog.csdn.net/u011096030/article/details/18716713 button 组件: CAPTION 属性 :用于在按钮上显示文本内容 Cancel ...

随机推荐

  1. 4:django url

    一个干净的,优雅的URL 方案是一个高质量Web 应用程序的重要细节. 这节我们来看看django是如何做到干净优雅的url的 1:Django如何处理一个请求 通过ROOT_URLCONF决定根UR ...

  2. window,getComputedStyle,letter-spacing

       js 拿到element的css样式    window.getComputedStyle(ele,[pseuso)    比如想拿到一个element的背景色 window.getComput ...

  3. beatfullsoup

    阅读目录 一 介绍 二 基本使用 三 遍历文档树 四 搜索文档树 五 修改文档树 六 总结 一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通 ...

  4. 使用python读取文本中结构化数据

    需求 read some .txt file in dir and find min and max num in file. solution: echo *.txt > file.name ...

  5. 【转载】C++之继承与多态

    转自:http://www.cnblogs.com/kunhu/p/3631285.html 在程序设计领域,一个广泛认可的定义是“一种将不同的特殊行为和单个泛化记号相关联的能力”.和纯粹的面向对象程 ...

  6. mybatis 报错: Invalid bound statement (not found)

    错误: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): test.dao.Produc ...

  7. php 如何写 mysql insert into 语句

    $sql="INSERT INTO moneytb (riqi,item,inout,cost,bz) VALUES ('$riqi','$item','$inout','$cost','$ ...

  8. Codeforces 1131 F. Asya And Kittens-双向链表(模拟或者STL list)+并查集(或者STL list的splice()函数)-对不起,我太菜了。。。 (Codeforces Round #541 (Div. 2))

    F. Asya And Kittens time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. Codeforces 1082 D. Maximum Diameter Graph-树的直径-最长链-构造题 (Educational Codeforces Round 55 (Rated for Div. 2))

    D. Maximum Diameter Graph time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  10. SPOJ11469 Subset(折半枚举)

    题意 给定一个集合,有多少个非空子集,能划分成和相等的两份.\(n\leq 20\) 题解 看到这个题,首先能想到的是\(3^n\)的暴力枚举,枚举当前元素是放入左边还是放入右边或者根本不放,但是显然 ...