UIkit框架之UIwebview

时间:2024-03-28 12:04:20

1.继承链:UIview:UIResponder:NSObject

2.使用loadHTMLString:baseURL:方法来加载本地的HTML文件,或者使用 loadRequest:方法来加载网络内容,使用stopLoading方法来停止加载网络内容

loading属性能够发现是否正在加载网络内容

3.使用goBack and goForward方法在按钮上执行回放或者前放网页,使用 canGoBack and canGoForward方法决定用户是否可以使用回放或者前放的功能

4.支持的文件格式:除了支持了HTML的文件,也支持Keynote、PDF和page文件,为了能够更加直观的使用app,最好就使用UItextview控件

5.设置委托

    (1)@property(nonatomic, assign) id< UIWebViewDelegate> delegate  :设置委托,遵守UIWebViewDelegate协议

6.加载内容

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

data

The content for the main page.

MIMEType

The MIME type of the content.

encodingName

The IANA encoding name as in utf-8 or utf-16.

baseURL

The base URL for the content.

    解释:为应用插入指定路径的网络内容,UIWebView加载资源第三种方式 将本地数据转化为NSData嵌入到webView

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

string

The content for the main page.

baseURL

The base URL for the content.

      解释:为应用嵌入web信息,用来加载本地的内容

    (3)- (void)loadRequest:(NSURLRequest *)request  :用来加载网页指定路径的内容,记得这个不可以加载本地的数据

    (4)@property(nonatomic, readonly, strong) NSURLRequest*request  :返回加载内容的路径,只读

    (5)@property(nonatomic, readonly, getter=isLoading) BOOL loading  :确认接收者是否正在加载,只读

    (6)- (void)stopLoading  :停止加载

    (7)- (void)reload  :重新加载当前内容

7.前放和后退

    (1)@property(nonatomic, readonly, getter=canGoBack) BOOL canGoBack  :这个值指定用户是否能够后退,只读

    (2)@property(nonatomic, readonly, getter=canGoForward) BOOL canGoForward  :这个值指定用户是否能够前放,只读

    (3)- (void)goBack  :进行后退操作

    (4)- (void)goForward  :进行前放操作

8.设置web内容的属性

    (1)@property(nonatomic) BOOL allowsLinkPreview  :是否能够对指定连接的内容进行预览

    (2)@property(nonatomic) BOOL scalesPageToFit  :是否能够让webpage铺满视图,是否能够让用户进行改变比例

    (3)@property(nonatomic, readonly, strong) UIScrollView*scrollView  :获取和web view连接的滚动视图

    (4)@property(nonatomic) BOOL suppressesIncrementalRendering  :布尔会值决定是否要在所有内容加载到内存中的时候才可以进行渲染

    (5)@property(nonatomic) BOOL keyboardDisplayRequiresUserAction  :指定键盘是否能够根据用户的需要在web view中弹出

    (6)@property(nonatomic) UIDataDetectorTypesdataDetectorTypes  :获取或者设置数据的类型

9.运行JavaScript

    (1)- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script  :返回JavaScript的脚本

10.管理媒体的回放

    (1)@property(nonatomic) BOOL allowsInlineMediaPlayback  :是否允许HTML5的视频play inline或者是否能够满屏播放

    (2)@property(nonatomic) BOOL mediaPlaybackRequiresUserAction  :决定是让视频自动播放还是让用户手动播放

    (3)@property(nonatomic) BOOL mediaPlaybackAllowsAirPlay  :是否允许共享播放视频

    (4)@property(nonatomic) BOOL allowsPictureInPictureMediaPlayback  :是否允许画中画能够进行回放

11.管理页面

    (1)@property(nonatomic) CGFloatgapBetweenPages  :获取设置两个pages之间的相隔的距离和位置

    (2)@property(nonatomic, readonly) NSUIntegerpageCount  :返回页的数量,只读

    (3)@property(nonatomic) CGFloatpageLength  :获取每个page的长度

    (4)@property(nonatomic) UIWebPaginationBreakingModepaginationBreakingMode  :这个属性决定了CSS属性是采用column-break 还是page-breaking样式

    (5)@property(nonatomic) UIWebPaginationModepaginationMode  :设置是否使用分页的形式来展示web内容

12.数据类型

    (1)UIWebViewNavigationType的类型

        

      UIWebViewNavigationTypeLinkClicked,  //用户触发了一个链接

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

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

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

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

      UIWebViewNavigationTypeOther  //发生了其他行为

    (2)UIWebPaginationBreakingMode的类型

      UIWebPaginationBreakingModePage,  //默认设置是这个属性,CSS属性以页样式。

      UIWebPaginationBreakingModeColumn  //当UIWebPaginationBreakingMode设置这个属性的时候,这个页面内容CSS属性以column-break 代替page-breaking样式。

后面的这些事别人写的:

UIWebView全部API学习。

最生僻的API做了下划线以及粗体的标注。百度上查了全是拷贝的同一份代码,而且只有代码没有解释,很是鄙视。

//1. UIWebViewNavigationType枚举定义了页面中用户行为的分类

typedef NS_ENUM(NSInteger, UIWebViewNavigationType) {

UIWebViewNavigationTypeLinkClicked,//用户触发了一个链接

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

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

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

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

UIWebViewNavigationTypeOther//发生了其他行为

};

//2. 加载内容关于分页显示几种不同类型

typedef NS_ENUM(NSInteger, UIWebPaginationMode) {

UIWebPaginationModeUnpaginated,

UIWebPaginationModeLeftToRight,

UIWebPaginationModeTopToBottom,

UIWebPaginationModeBottomToTop,

UIWebPaginationModeRightToLeft

};

//3.这个枚举决定了webView加载页面具有CSS属性时是使用页的样式还是以列的样式。

typedef NS_ENUM(NSInteger, UIWebPaginationBreakingMode) {

    UIWebPaginationBreakingModePage,//默认设置是这个属性,CSS属性以页样式。

    UIWebPaginationBreakingModeColumn//当UIWebPaginationBreakingMode设置这个属性的时候,这个页面内容CSS属性以column-break 代替page-breaking样式。

};

@class UIWebViewInternal;

@protocol UIWebViewDelegate;

NS_CLASS_AVAILABLE_IOS(2_0) @interface UIWebView : UIView<NSCoding, UIScrollViewDelegate> {

@private

UIWebViewInternal *_internal;

}

//4.实现WebView代理方法

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

//5.WebView的scrollView属性

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

//6.UIWebView加载资源最常用的一种方式,直接给出URL进行加载

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

//7.UIWebView加载资源第二种方式,将本地html文件内容嵌入到WebView

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

// 8. UIWebView加载资源第三种方式 将本地数据转化为NSData嵌入到webView

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

//9.URL请求

@property (nonatomic, readonly, retain) NSURLRequest*request;

//10.webView加载刷新

- (void)reload;

//11. webView停止加载

- (void)stopLoading;

//12.当webView跳转了一个网页时,执行goBack可以回退到之前的界面。

- (void)goBack;

//13..执行goForward前进一个之前跳过的界面

- (void)goForward;

//14.只读型bool值,用来判断当前页面是否可以回退

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

//15.只读型bool值,用来判断当前页面是否可以前进

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

//16.只读型bool值,用来判断当前页面是否可以加载刷新

@property (nonatomic, readonly, getter=isLoading) BOOLloading;

//17.这个方法需要等到webView加载完毕之后才会调用,通过它我们可以很方便的操作UIWebView中的页面元素。参数script用来传进当前页面文件元素字符串,对传进来的字符串进行相应的操作,例如[webview stringByRvaluaingJavaScriptFromString:@“document.title”],可以得到页面的title

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

//18.是否让内容伸缩至适应屏幕当前尺寸

@property (nonatomic) BOOL scalesPageToFit;

//19.这个属性如果设置为YES,当进入到页面视图可以自动检测电话号码,让用户可以单机号码进行拨打,不过现已弃用。

@property (nonatomic) BOOL detectsPhoneNumbers NS_DEPRECATED_IOS(2_0, 3_0);

//20.这个属性可以设定使电话号码,网址,电子邮件和符合格式的日期等文字变为连接文字。

@property (nonatomic) UIDataDetectorTypes dataDetectorTypes NS_AVAILABLE_IOS(3_0);

//21.这个属性决定了页面用内嵌HTML5播放视频还是用本地的全屏控制。为了内嵌视频播放,不仅仅需要在这个页面上设置这个属性,还需要在HTML的viedeo元素必须包含webkit-playsinline属性。默认iPhone为NO,iPad为YES。

@property (nonatomic) BOOL allowsInlineMediaPlaybackNS_AVAILABLE_IOS(4_0); // iPhone Safari defaults to NO. iPad Safari defaults to YES

//22.这个属性决定了HTML5视频可以自动播放还是需要用户启动播放。iPhone和iPad默认都是YES。

@property (nonatomic) BOOL mediaPlaybackRequiresUserActionNS_AVAILABLE_IOS(4_0); // iPhone and iPad Safari both default to YES

//23.这个属性决定了从这个页面是否可以Air Play。iPhone和iPad上都是默认YES。

@property (nonatomic) BOOL mediaPlaybackAllowsAirPlayNS_AVAILABLE_IOS(5_0); // iPhone and iPad Safari both default to YES

//24.这个值决定了网页内容的渲染是否在把内容全部假爱到内存中再去处理。如果设置为YES,只有网页内容加载到内存里了才会去渲染。默认为NO。

@property (nonatomic) BOOL suppressesIncrementalRenderingNS_AVAILABLE_IOS(6_0); // iPhone and iPad Safari both default to NO

//25.这个属性如果设置为YES,用户必须明确的点击页面上的元素或者相关联的输入页面来显示键盘,。如果设置为NO,一个元素的焦点事件就会导致输入视图的显示和自动关联这个元素。

@property (nonatomic) BOOL keyboardDisplayRequiresUserAction NS_AVAILABLE_IOS(6_0); // default is YES

//26.iOS7之后的新API,设置页面分页模型选择。

@property (nonatomic) UIWebPaginationMode paginationMode NS_AVAILABLE_IOS(7_0);

//27.这个属性决定了CSS属性是采用column-break 还是page-breaking样式。

@property (nonatomic) UIWebPaginationBreakingMode paginationBreakingMode NS_AVAILABLE_IOS(7_0);

//28.分页的长度

@property (nonatomic) CGFloat pageLength NS_AVAILABLE_IOS(7_0);

//29.多个页面之间差距值

@property (nonatomic) CGFloat gapBetweenPages NS_AVAILABLE_IOS(7_0);

//30.分页的个数。

@property (nonatomic, readonly) NSUInteger pageCountNS_AVAILABLE_IOS(7_0);

@end

@protocol UIWebViewDelegate <NSObject>

@optional

//31.UIWebView的代理方法,当webview开始加载请求的时候回去调用,可以拦截一些用户的行为是否加载。返回YES代表允许加载,返回NO代表停止加载。

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

//32.webView加载开始的时候调用。

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

//33.webView加载完毕的时候调用。

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

//34.webView加载失败的时候调用

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

@end