Swift加载网络接口合成HTML页面示例

概述:使用Swift,通过拉取网易接口数据,在swift工程中创建js、css文件及html格式,使用webView 加载接口内容并用页面展示的示例;仅供参考;

示例:

[图片上传失败...(image-92556-1575197751455)]

过程:

1. NSURLSession 加载数据
 if  let  url = NSURL(string:"http://c.m.163.com/nc/article/BJ5NRE5T00031H2L/full.html"  ){
            // 设置urlRequest
            let request = NSURLRequest(URL: url)
            // 异步加载请求
            let dataTask = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) in
                if error == nil {
                    // 转为json数据
                    if let jsonData = try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary {
                    // 处理数据并显示
                    self.deal(jsonData)
                    }
                }
            })
            // 开启请求
            dataTask.resume()
        }
2. 处理数据
func deal(jsonData:NSDictionary) -> Void {
      guard let allData = jsonData["BJ5NRE5T00031H2L"] else{
          return
      }
      print(allData)
      // 1. 去除body中内容
      guard  let bodyHtml = allData["body"] as? String else {
          return;
      }
      // 2. 取出标题
      guard let title = allData["title"] as? String else {
          return
      }
      // 3. 取出发布时间
      guard let ptime = allData["ptime"] as? String else {
          return
      }
      // 4. 取出来源
      guard let source = allData["source"] as? String else {
          return
      }
      // 5. 取出所有图片对象
      guard let img = allData["img"] as? [[String: AnyObject]] else{
          return
      }
      // 6. html最终的body
      var finalBodyHtml = ""
      // 7. 遍历
      for i in 0..<  img.count {
          // 6.1 取出单独的图片对象
          let imgItem = img[i]
          // 6.2
          if let ref = imgItem["ref"] as? String {
          // 6.3 取出src
          let src = ((imgItem["src"] as? String) != nil) ? imgItem["src"] as! String : ""
          let alt = ((imgItem["alt"] as? String) != nil)  ? imgItem["src"] as! String : ""
          let imgHtml ="< div class=\"all-img\">\< img src=\"\(src)\" alt=\"\(alt)\">\</ div>"
          let subBodyHtml = bodyHtml.stringByReplacingOccurrencesOfString(ref, withString: imgHtml)
        finalBodyHtml = finalBodyHtml.stringByAppendingString(subBodyHtml)
          }
      }
      // 创建标题的HTML标签
      let titleHtml = "< div id=\"mainTitle\">\(title)< /div>"
      // 创建子标题的html标签
      let subTitleHtml = "< div id=\"subTitle\"><span class=\"time\">\\(ptime)</span><span>\\(source)</span></ div>"
      // 加载css的url路径
      let cssUrl_temp = NSBundle.mainBundle().URLForResource("newsDetail", withExtension: "css")?.absoluteString
     let cssUrl = (cssUrl_temp != nil) ? cssUrl_temp! : ""
      // 创建link
      let cssHtml = "<link href=\"\(cssUrl)\" rel = \"stylesheet\">"
      // 加载js的路径
      let jsUrl_temp = NSBundle.mainBundle().URLForResource("newsDetail", withExtension: "js")?.absoluteString
      let jsUrl = jsUrl_temp != nil ? jsUrl_temp! : ""
      let jsHtml =  "<script src=\"\(jsUrl)\" type=\"text/javascript\"></script>"
      // 拼接
      let html =  "<html><head>\(cssHtml)</head><body>\(titleHtml)\(subTitleHtml)\(finalBodyHtml)\(jsHtml)</body></html>"
      // 加载
      webView.loadHTMLString(html, baseURL: nil)
  }
3. 简单的css 样式
body{
/*    background-color: red;*/
}
img{
    width: 100%;
}
\#mainTitle{
    text-align: center;
    font-size: 20px;
    margin-top: 25px;
    margin-bottom:8px;
}
\#subTitle{
    color: gray;
    text-align:center;
}
.time{
    margin-right: 10px;
    margin-bottom:8px;
}
.all-img{
    text-align: center;
    color:gray;
    margin: 8px 0;
}
4. 简单的js
window.onload = function(){
    // 拿到所有的图片
    var allImg = document.getElementsByTagName("img");
   // alert(allImg.length);
    // 遍历
    for(var i = 0; i < allImg.length; i++){
        // 取出单个图片对象
        var img = allImg[i];
        img.id = i;
        // 监听点击
        img.onclick = function(){
            //alert('点击了'+ this.id + '张')
            // js调用,swift接收
            window.location.href = "xmg:///openCamera";
        }
    }
    // 往网页尾部加入图片
    var img = document.createElement('img');
    img.src = 'http://pic8.nipic.com/20100623/55218_100905033361_2.jpg';
    document.body.appendChild(img);
}
5. swift 接收图片点击事件,并弹出相册
//UIVebViewDelegate
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        // 1. 取出请求字符串
        if let absolut:NSString = request.URL?.absoluteString {
            // 2. 判断
            let urlHeader = "xmg:///"
            if(absolut.hasPrefix(urlHeader)) {
                // 取出方法名
                let method = absolut.substringFromIndex(urlHeader.characters.count)
//                if method == "openCamera" {
//                    print(method)
//                  self.openCamera()
//                }
                // 包装
                let sel = NSSelectorFromString(method)
                // 执行
                if self.respondsToSelector(sel) {
                    self.performSelector(sel)
                }
            }
        }
        return true;
    }
    // js访问相册
    func openCamera() -> Void {
        let photoVC = UIImagePickerController();
        photoVC.sourceType = UIImagePickerControllerSourceType.PhotoLibrary;
        // 模态出来
        self.presentViewController(photoVC, animated: true, completion: nil);
    }

以上内容,是一种思路,仅供参考;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,276评论 4 61
  • 嗯哼嗯哼蹦擦擦~~~ 转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 ...
    philiha阅读 5,060评论 0 6
  • 今天是老哥的生日一群厮混了十几年的死党在这个暧昧的日子聚在了帝都真心觉得缘分是很奇妙的事 特地提早就预定好了京城的...
    哈哈同学阅读 152评论 0 0
  • 先从一个问题开始: 如果你开一个饭馆,在每月利润5000元的前提下,你是会选择自己炒菜,还是会自己啥也不干花400...
    张佳_喜新阅读 937评论 0 17
  • 有些人身边围着很多人 谈笑风生你来我往并如痴如醉 有些人只身鞍马不回头 清风流水怡然自乐才得以清修 你且看着稍安勿...
    心疼兔子阅读 174评论 1 2