iOS – UIWebView

转自:http://www.cnblogs.com/aehyok/p/3404867.html

前言

    NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UIWebView : UIView <NSCoding, 
        UIScrollViewDelegate> 
    @available(iOS 2.0, *) public class UIWebView : UIView, NSCoding, UIScrollViewDelegate
  • UIWebView
    控件是做网络利用开发时选拔的最多的多少个控件,它完成了内置的浏览器(类似于
    Safari),并且 UIWebView 继承自
    UIView,能够将其像别的控件1样接纳到须求的地点。

  • 优点:简单,快速。

  • 缺点:内部存款和储蓄器消耗大,对于手提式有线电话机端的硬件辅助不够好,例如:定位,捏合(守旧网络只有点击动作)。

  • 动用场景:

    1. 符合于内容版式变化比较大的应用。

      腾讯网音讯,各类图像和文字混排,甚至放到摄像。
      菜单,各类图片搭配,图像和文字并茂。
      运动类的应用:羽球,后场高远球,来一段摄像,图解表达,分解动作…。

    2. 有点公司,有网址,未有 iOS 应用,着急上架,能够先用 webView
      急迅包装三个。

      百度的壹多元应用,2018年开春才日渐的转成 iOS 应用。

    3. 一加 手提式有线电电话机的浏览器 Safari 便是用 UIWebView 控件开发的。
      微信内嵌的浏览器正是 UIWebView 控件

  • iOS 玖+ 中若要加载 http: 互连网,须要在 Info.plist 中添加 App Transport
    Security Settings -> key: Allow Arbitrary Loads,value: YES。

前言

1、UIWebView 的创建

  • Objective-C

        UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20)];
    
        // 将 webView 添加到屏幕
        [self.view addSubview:webView];
    
        // 加载网络地址
        [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
    
        // 适配屏幕
        webView.scalesPageToFit = YES;
    
  • Swift

        let webView:UIWebView = UIWebView(frame: CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20))
    
        // 将 webView 添加到屏幕
        self.view.addSubview(webView)
    
        // 加载网络地址
        webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!))
    
        // 适配屏幕
        webView.scalesPageToFit = true
    

  首先在此感谢博友们在前几篇博文个中给与的援助和鼓励,以及在恢复中提议的标题、意见和看法。

2、UIWebView 的设置

  • Objective-C

        // 加载指定 URL 所设定的内容
        /*
            异步加载,可以从服务器和本地读取
        */
    
            // 加载网络数据
            [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
    
            // 加载本地文件
            [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu" 
                                                                                                                     ofType:@"pdf"]]]];
    
        // 加载 HTML 字符串数据
        /*
            指定 baseURL 可加载图片
        */
    
            // 加载网络 HTML 字符串数据
            NSString *htmlString1 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://m.baidu.com/"] 
                                                             encoding:NSUTF8StringEncoding 
                                                                error:NULL];
            [webView loadHTMLString:htmlString1 baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]];
    
            // 加载本地 HTML 字符串数据
            NSString *htmlString2 = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"] 
                                                              encoding:NSUTF8StringEncoding 
                                                                 error:NULL];
            [webView loadHTMLString:htmlString2 baseURL:nil];
    
        // 加载 Data 数据
        /*
            比 loadHTMLString 更底层
        */
        NSData *data = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"]]];
        [webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]];
    
        // 适配屏幕
        /*
            YES 页面可以通过放大和缩小去适应,用户也可以通过手势来放大和缩小
        */
        webView.scalesPageToFit = YES;
    
        // 设置自动分页模式
        /*
            UIWebPaginationModeUnpaginated,   // 默认不分页
            UIWebPaginationModeLeftToRight,
            UIWebPaginationModeTopToBottom,
            UIWebPaginationModeBottomToTop,
            UIWebPaginationModeRightToLeft
         */
        webView.paginationMode = UIWebPaginationModeLeftToRight;
    
        // 设置超链接类型
        /*
            UIDataDetectorTypePhoneNumber     = 1 << 0,          // Phone number detection
            UIDataDetectorTypeLink            = 1 << 1,          // URL detection
            UIDataDetectorTypeAddress         = 1 << 2,          // Street address detection
            UIDataDetectorTypeCalendarEvent   = 1 << 3,          // Event detection
    
            UIDataDetectorTypeNone            = 0,               // No detection at all
            UIDataDetectorTypeAll             = NSUIntegerMax    // All types
        */
        webView.dataDetectorTypes = UIDataDetectorTypeAll;
    
        // 设置是否用内嵌 HTML5 播放视频
        /*
            内嵌播放 HTML 中的 video 元素必须包含 webkit-playsinline 属性
            YES 内嵌播放,NO 本地全屏控制,iPhone Safari defaults to NO. iPad Safari defaults to YES
        */
        webView.allowsInlineMediaPlayback = NO;
    
        // 设置是否需要用户触发来启动媒体播放
        /*
            iPhone and iPad Safari both default to YES
        */
        webView.mediaPlaybackRequiresUserAction = NO;
    
        // 设置本页面是否可以 AirPlay 播放
        /*
            iPhone and iPad Safari both default to YES
        */
        webView.mediaPlaybackAllowsAirPlay = YES;
    
        // 设置是否把网页内容全部加载到内存中再去渲染
        /*
            iPhone and iPad Safari both default to NO
        */
        webView.suppressesIncrementalRendering = NO;
    
        // 设置是否需要用户触发显示键盘
        /*
            default is YES
        */
        webView.keyboardDisplayRequiresUserAction = NO;
    
        // 刷新
        /*
            重新加载页面
        */
        [webView reload];
    
        // 停止加载
        /*
            加载过程中,强行停止加载
        */
        [webView stopLoading]; 
    
        // 返回至上一个链接
        /*
            在产生多个链接浏览时,可以返回至浏览历史的上一个链接
        */
        [webView goBack];
    
        // 前进至下一个链接
        /*
            在产生多个链接浏览时,可以前进至浏览历史的下一个链接
        */
        [webView goForward];
    
        // 设置代理,需遵守协议 <UIWebViewDelegate>
        webView.delegate = self;
    
  • Swift

        // 加载指定 URL 所设定的内容
        /*
            异步加载,可以从服务器和本地读取
        */
    
            // 加载网络数据
            webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!))
    
            // 加载本地文件                                                   
            webView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Baidu", ofType: "pdf")!)))
    
        // 加载 HTML 字符串数据
        /*
            指定 URL 可加载图片
        */
    
            // 加载网络 HTML 字符串数据
            let htmlString1:String = try! String(contentsOfURL: NSURL(string: "https://m.baidu.com/")!, encoding: NSUTF8StringEncoding)
            webView.loadHTMLString(htmlString1, baseURL: NSURL(string: "https://m.baidu.com/")!)
    
            // 加载本地 HTML 字符串数据
            let htmlString2:String = try! String(contentsOfFile: NSBundle.mainBundle().pathForResource("Baidu", ofType: "html")!, 
                                                       encoding: NSUTF8StringEncoding)
            webView.loadHTMLString(htmlString2, baseURL: nil)
    
        // 加载 Data 数据
        /*
            比 loadHTMLString 更底层
        */
        let data = NSData(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Baidu", ofType: "html")!))
        webView.loadData(data!, MIMEType: "text/html", textEncodingName: "utf-8", baseURL: NSURL(string: "https://m.baidu.com/")!)
    
        // 适配屏幕
        /*
            true 页面可以通过放大和缩小去适应,用户也可以通过手势来放大和缩小
        */
        webView.scalesPageToFit = true
    
        // 设置自动分页模式
        /*
            case Unpaginated    // 默认不分页
            case LeftToRight
            case TopToBottom
            case BottomToTop
            case RightToLeft
        */
        webView.paginationMode = .Unpaginated
    
        // 设置超链接类型
        /*
            PhoneNumber     // Phone number detection
            Link            // URL detection
            Address         // Street address detection
            CalendarEvent   // Event detection
    
            None            // No detection at all
            All             // All types
        */
        webView.dataDetectorTypes = .All
    
        // 设置是否用内嵌 HTML5 播放视频
        /*
            内嵌播放 HTML 中的 video 元素必须包含 webkit-playsinline 属性
            YES 内嵌播放,NO 本地全屏控制,iPhone Safari defaults to NO. iPad Safari defaults to YES
        */
        webView.allowsInlineMediaPlayback = false
    
        // 设置是否需要用户触发来启动媒体播放
        /*
            iPhone and iPad Safari both default to YES
        */
        webView.mediaPlaybackRequiresUserAction = false
    
        // 设置本页面是否可以 AirPlay 播放
        /*
            iPhone and iPad Safari both default to YES
        */
        webView.mediaPlaybackAllowsAirPlay = true
    
        // 设置是否把网页内容全部加载到内存中再去渲染
        /*
            iPhone and iPad Safari both default to NO
        */
        webView.suppressesIncrementalRendering = false
    
        // 设置是否需要用户触发显示键盘
        /*
            default is YES
        */
        webView.keyboardDisplayRequiresUserAction = false
    
        // 刷新
        /*
            重新加载页面
        */
        webView.reload()
    
        // 停止加载
        /*
            加载过程中,强行停止加载
        */
        webView.stopLoading()
    
        // 返回至上一个链接
        /*
            在产生多个链接浏览时,可以返回至浏览历史的上一个链接
        */
        webView.goBack()
    
        // 前进至下一个链接
        /*
            在产生多个链接浏览时,可以前进至浏览历史的下一个链接
        */
        webView.goForward()
    
        // 设置代理,需遵守协议 UIWebViewDelegate
        webView.delegate = self
    

  在此先声可瑞康(Karicare)(Karicare)下,此前在下小菜具有的小说小说中,唯有前两篇关于Bootstrap的文章见报在了今日头条的首页,对于公布的这两篇文章的感受正是:我们的出席度比此前的高很多。当然也不是说见到自个儿的篇章发布在首页,有了几千竟然几万访问量,个人觉得温馨所享用的一点东西大概对于大家也是有有些效益的,本身从评价中能够观望是真的有那么一堆人密切看了团结写的小说,会让你以往写文章的时候尤其的细致,也特别自信,本人也从中获得更多的鼎力相助、成长、兴奋。希望有更多的人投入到分享文化的队列当中,当然个人认为那类啥啥嘲弄之类的小说依旧……

三、UIWebView 的情商形式

  • 需服从协议 UIWebViewDelegate,并设置代理

  • Objective-C

        // 将要开始加载网页
        - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    
            return YES;
        }
    
        // 开始加载网页
        - (void)webViewDidStartLoad:(UIWebView *)webView {
    
        }
    
        // 加载网页完成
        - (void)webViewDidFinishLoad:(UIWebView *)webView {
    
        }
    
        // 加载网页失败
        - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    
        }
    
  • Swift

        // 将要开始加载网页
        func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    
            return true
        }
    
        // 开始加载网页
        func webViewDidStartLoad(webView: UIWebView) {
    
        }
    
        // 加载网页完成
        func webViewDidFinishLoad(webView: UIWebView) {
    
        }
    
        // 加载网页失败
        func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
    
        }
    

  计算一下前两篇小说中设有的一对难点和眼光吧。

  1.浏览器兼容性:你能够去看望大咖的1篇作品http://www.cnblogs.com/lhb25/archive/2013/06/05/html5-and-css3-2013.html 
梦想天空的

  2.开发工具:未来在求学时期自身使用的是Adobe Dreamweaver CS陆。

  三.测试浏览器:IE10、最新版的FireFox、最新版的Chrome,如若有博友通过本人小说中的代码实行测试,那么最佳和本身壹样选用那三种浏览器。

     
四.名目繁多设计:本来只打算自身写几篇学习Bootstrap的稿子,也没怎么安排,可是有些博友的提议也促动了自家有那篇小说的重力。

  本身小菜能力实际有限,还望大牌多给菜肴一些提出和观点,倘诺文中确有不妥之处,还请各位看官及早公告作者,自个儿将在最短的光阴进行处理和创新。希望能和我们共成长,共欢腾,共分享。

Bootstrap种类导航

BootStrap叁.0密密麻麻导航总体规划大概主要分为三个部分

一、先是局部:Bootstrap介绍

二、其次部分:Bootstrap
CSS

三、其3有的:Bootstrap JavaScript
Component

四、第伍片段:Bootstrap JavaScript
Plug-in

五、第4有些:Bootstrap
Less.js

首先有的:Bootstrap介绍

一.Bootstrap学学从前天始于 http://www.cnblogs.com/aehyok/p/3381651.html

②.Bootstrap三.0上学第一轮(入门)http://www.cnblogs.com/aehyok/p/3398359.html

其次片段:Bootstrap CSS

三.Bootstrap3.0读书第三轮(栅格系统介绍)http://www.cnblogs.com/aehyok/p/3400499.html

四.Bootstrap三.0就学第三轮车(栅格系统案例)http://www.cnblogs.com/aehyok/p/3404725.html

伍.Bootstrap3.0读书第伍轮(排版)http://www.cnblogs.com/aehyok/p/3406272.html

陆.Bootstrap三.0就学第陆轮(表格)http://www.cnblogs.com/aehyok/p/3407614.html

7.Bootstrap三.0学习第5轮(表单)http://www.cnblogs.com/aehyok/p/3407737.html

8.Bootstrap3.0上学第玖轮(按钮)http://www.cnblogs.com/aehyok/p/3409467.html

玖.Bootstrap三.0学习第10轮(工具class)http://www.cnblogs.com/aehyok/p/3409597.html

十.Bootstrap三.0上学第8轮(CSS补充)http://www.cnblogs.com/aehyok/p/3411073.html

其三片段:Bootstrap Component

11.Bootstrap三.0上学第九轮(下拉菜单、按钮组、按钮式下拉菜单)http://www.cnblogs.com/aehyok/p/3411626.html

1贰.Bootstrap3.0学学第71轮(输入框组)http://www.cnblogs.com/aehyok/p/3414063.html

一三.Bootstrap三.0上学第八2轮(导航、标签、面包屑导航)http://www.cnblogs.com/aehyok/p/3415209.html

1四.Bootstrap三.0学习第七三轮车(导航条)http://www.cnblogs.com/aehyok/p/3415210.html

壹5.Bootstrap三.0上学第七肆轮(分页、徽章)http://www.cnblogs.com/aehyok/p/3416514.html

1陆.Bootstrap三.0学习第八5轮(大显示器介绍、页面标题、缩略图、警示框、Well)http://www.cnblogs.com/aehyok/p/3417358.html

一7.Bootstrap三.0学学第玖陆轮(进程条、媒体对象、列表组、面板)http://www.cnblogs.com/aehyok/p/3417359.html

第陆有的:Bootstrap JavaScript Plug-in

18.Bootstrap3.0学学第97轮(模态框)http://www.cnblogs.com/aehyok/p/3417371.html

1九.Bootstrap三.0读书第八八轮(下拉菜单)http://www.cnblogs.com/aehyok/p/3420293.html

20.Bootstrap三.0就学第拾9轮(标签页)http://www.cnblogs.com/aehyok/p/Bootstrap-19-JavaScript-Tab.html

二壹.Bootstrap3.0读书第三10轮(滚动监听)http://www.cnblogs.com/aehyok/p/3421942.html

2二.Bootstrap三.0就学第1101轮(工具提醒)http://www.cnblogs.com/aehyok/p/3422286.html

2三.Bootstrap三.0读书第三拾二轮(弹出框)http://www.cnblogs.com/aehyok/p/3424438.html

贰四.Bootstrap3.0就学第一十三轮车(警示框)http://www.cnblogs.com/aehyok/p/3424558.html

25.Bootstrap三.0学习第一10肆轮(按钮)http://www.cnblogs.com/aehyok/p/3426395.html

2陆.Bootstrap三.0就学第三拾伍轮(折叠)http://www.cnblogs.com/aehyok/p/3426502.html

二七.Bootstrap三.0学习第三拾五轮(轮播)http://www.cnblogs.com/aehyok/p/3427600.html

第4有的:Bootstrap Less.js

2八.未完待续……

总结

  不难的梳理了弹指间,比想象中配备学习的类似还要多。当然铺排比不上变化,在履行的进度其中本种类导航大概会有两样程度更改,可是也没怎么关系的,小编会立马更新本文相关地点。

  趁着周末的大好时光,礼拜6玩的挺好的,先去看了女对象集团团队的篮球竞技,感受颇深。它们市镇部和研究开发部的比赛,最终结果定格在商场部以1一三比52的大比分优势获胜,不管怎样客观原因,让自家感觉到到的正是程序员们严重的枯窘锻练啊。时期也去运动打羽球了。然后深夜去找同学了,再和同学合伙给心上人庆出生之日了,挺充实的。周末深夜清醒,全身酸痛呀。让自己又忆起后天津高校比分落败的比赛。

  看来未来还真是要多安插了。合理的安插协调的日子,能够达到两全其美的效果。安排好了以后,层次脉络对全局也有了1个大概的掌握控制了。好啊,接下去就是遵照这一个类别安排稳步的就学下去了,也期待本人力所能及坚定不移下去。也由衷的冀望广大程序猿们能够多多注意本人的肌体,多多磨炼吗。本身也要配置一定的时间来练习身体了。