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);
    }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

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