热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

swift加载本地html和网络路径

先上代码:xcode9.4 ios11.4importUIKitimportWebKitclassRootViewController:UIViewController,WKNav

先上代码: xcode 9.4  ios 11.4

import UIKit
import WebKit

class RootViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 创建视图
        let screen = UIScreen.main.bounds
        // 按钮栏
        let buttonBarWidth:CGFloat = 316
        let buttonBar = UIView(frame: CGRect(x: (screen.size.width - buttonBarWidth)/2, y: 20, width:buttonBarWidth, height: 70))
        self.view.addSubview(buttonBar)
        
        let width = buttonBar.frame.size.width / 2 - 10
    //添加按钮
        let buttOnHTML= UIButton(type: UIButtonType.system)
        buttonHTML.setTitle("通过路径加载", for: UIControlState())
        buttonHTML.frame = CGRect(x:0, y:0, width: width, height: 30)
        //添加事件
        buttonHTML.addTarget(self, action: #selector(buttonHTML(_:)), for: .touchUpInside)
        buttonBar.addSubview(buttonHTML)
    
    //添加 loadHTMLString 按钮
        let loadHTMLString = UIButton(type: UIButtonType.system)
        loadHTMLString.setTitle("loadHTMLString", for: UIControlState())
        loadHTMLString.frame = CGRect(x: width + 10, y:0, width: width, height: 30)
        //添加事件
        loadHTMLString.addTarget(self, action: #selector(loadHTMLString(_:)), for: .touchUpInside)
        buttonBar.addSubview(loadHTMLString)
        
    //添加loadData按钮
        let loadData = UIButton(type: UIButtonType.system)
        loadData.setTitle("loadData", for: UIControlState())
        loadData.frame = CGRect(x:0, y: 40, width: width, height: 30)
        //添加事件
        loadData.addTarget(self, action: #selector(loadData(_:)), for: .touchUpInside)
        buttonBar.addSubview(loadData)
        
    //添加loadRequest按钮--- 加载网络地址
        let loadRequest = UIButton(type: UIButtonType.system)
        loadRequest.setTitle("loadRequest", for: UIControlState())
        loadRequest.frame = CGRect(x: width + 10, y: 40, width: width, height: 30)
        //添加事件
        loadRequest.addTarget(self, action: #selector(loadRequest(_:)), for: .touchUpInside)
        buttonBar.addSubview(loadRequest)
        
    //添加WKWebView
        self.webView = WKWebView(frame: CGRect(x:0, y: 100, width: screen.size.width, height: screen.size.height - 100 ))
        self.view.addSubview(webView)
    }
    // 加载本地html 点击事件
    @objc func buttonHTML(_ sender: AnyObject){
        // 方法一 加载路径
        let htmlPath = Bundle.main.path(forResource: "index", ofType: "html")
        if let htmlPath =  htmlPath {
            let url = URL.init(fileURLWithPath: htmlPath) // 把字符串 转成 URL 类型
            let request = URLRequest(url: url)
            self.webView.load(request)
            self.webView.navigationDelegate = self
        }
        // 方法二 加载路径
        //        let htmlPath = Bundle.main.url(forResource: "index", withExtension: "html")
        //        if let htmlPath = htmlPath{
        //            let request = URLRequest(url: htmlPath)
        //            self.webView.load(request)
        //            self.webView.navigatiOnDelegate= self
        //        }
    }
    // loadHTMLString
    @objc func loadHTMLString(_ sender: AnyObject){
        // 方法一 直接加载 html 字符串
        //        let bundleUrl = NSURL.fileURL(withPath: Bundle.main.bundlePath)
        //        self.webView.loadHTMLString("

测试标题

", baseURL: bundleUrl)
// 方法二 把本地文件转成字符串,进行加载 let htmlPath = Bundle.main.path(forResource: "index2", ofType: "html") let bundleUrl = NSURL.fileURL(withPath: Bundle.main.bundlePath) do{ let html = try NSString(contentsOfFile: htmlPath!, encoding: String.Encoding.utf8.rawValue) self.webView.loadHTMLString(html as String, baseURL: bundleUrl) }catch let err as NSError{ err.description } } // loadData 方式加载 -- > loadData 已经转换成--> load @objc func loadData(_ sender: AnyObject){ let htmlPath = Bundle.main.path(forResource: "index3", ofType: "html") let bundleUrl = NSURL.fileURL(withPath: Bundle.main.bundlePath) let htmlData = NSData(contentsOfFile: htmlPath!) // NSData 要先转换成 Data 类型 self.webView.load(htmlData! as Data, mimeType: "text/html", characterEncodingName: "utf-8", baseURL: bundleUrl) } // loadRequest 加载网络路径 ---> loadRequest 已经改为 load , NSURL --> URL,NSURLRequest --> URLRequest @objc func loadRequest(_ sender: AnyObject){ let url = URL(string: "https://baidu.com") let request = URLRequest(url: url!) self.webView.load(request) self.webView.navigationDelegate = self } // 委托协议的监听方法 func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { print("开始加载") } func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { print("内容开始返回") } func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { print("加载完成") } func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { print("加载失败 error:" + error.localizedDescription) } }

上面 有四种方式 加载html 网页,

加载本地 html 的方法 有:

  1. buttonHTML
  2. loadHTMLString
  3. loadData
加载网络路径
  loadRequest

案例中每一种方法都可以加载成功,加载方式大同小异
swift 加载 本地html 和 网络路径

加载本地文件,会自动去找到文件,如上图 2 个静态文件夹,里面没找到就会寻找外面的静态文件夹。

加载网络资源会报错处理一下就好:https://www.cnblogs.com/bruce-gou/p/10517044.html
以上的方式 文件夹是通过 NEW Group 的方式创建的。
如果是 通过菜单 Add Files to 这种方式创建的 则不可以。这种方式创建的文件夹是蓝色的如图

swift 加载 本地html 和 网络路径


swift 加载 本地html 和 网络路径


通过以上方式创建的文件,通过 Bundle.main.path(forResource: "index", ofType: "html") 取不到路径
    @objc func test(_ sender: AnyObject){
        let bundlePath = Bundle.main.bundlePath
        let path = "file://\(bundlePath)/assets/index.html"
        let url = URL(string: path);
        let request = URLRequest(url: url!)
        self.webView.load(request)
    }

这样就可以取到路径值,就可以正常加载






 


推荐阅读
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • iOS开发Debug和Release的理解
    2019独角兽企业重金招聘Python工程师标准参考:http:blog.csdn.netmad1989articledetails406580331&# ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • C# WPF自定义按钮的方法
    本文介绍了在C# WPF中实现自定义按钮的方法,包括使用图片作为按钮背景、自定义鼠标进入效果、自定义按压效果和自定义禁用效果。通过创建CustomButton.cs类和ButtonStyles.xaml资源文件,设计按钮的Style并添加所需的依赖属性,可以实现自定义按钮的效果。示例代码在ButtonStyles.xaml中给出。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
author-avatar
KristenW_ong_湘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有