原文:http://blog.csdn.net/crazy_srufboy/article/details/21748995

要实现的效果

首先上图中间的 标题至内容 都是使用UIWebView显示,评论是UITableView可以往下拖加载更多评论,也可以增加评论同删除评论。

动机

评细页中使用 UIWebView 会使显示内容更加的灵活和简单,当然你也许可以网上找UITextView的扩展同样也行,但我感觉HTML更符合我的需求。在多年的PHP开发中我们知道,其实详细页都是大同小异,主要是显示的内容风格不同。但在iOS平台上,做这些拼拼接接的活很累也不易于维护,还要不断计算各种类型页面对象的位置,实在吃力不讨好。使用UIWebView将是一个不错的选择。

MGTemplateEngine 模版引擎

     MGTemplateEngine比较象 PHP 中的 Smarty 模版引擎,是一个轻量级的引擎,简单好用。只要设置很多不同的HMTL模版,就能轻松的实现一个View多种内容格式的显示,对于不熟悉HTML或者减轻工作量而言,把这些工作让设计分担一下还是很好的,也比较容易实现设计想要的效果。

首先,看看模版的代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <link href="./detail.css" rel="stylesheet">
  8. </head>
  9. <body>
  10. <div id='container' name="container">
  11. <div class="title">{{ title }}</div>
  12. <div class="date">{{ date }}</div>
  13. <div class="content">{{ content }}</div>
  14. </div>
  15. </body>
  16. </html>

Objective-C代码 - 下面的创建代码MGTemplateEngine都是从官方的例子中参考下来的,已经有很详细的说明

  1. // Set up template engine with your chosen matcher.
  2. MGTemplateEngine *engine = [MGTemplateEngine templateEngine];
  3. //[engine setDelegate:self];
  4. [engine setMatcher:[ICUTemplateMatcher matcherWithTemplateEngine:engine]];
  5. // 这里就是设置,或者里边塞变量的地方。其实也可以设置一个数组,这样模板的灵活也会更强。这里我就不演示了官方有例子
  6. [engine setObject:self.detailData[@"title"] forKey:@"title"];
  7. [engine setObject:self.detailData[@"content"] forKey:@"content"];
  8. // MGTemplateEngine/Detail/detail.html
  9. // MGTemplateEngine/Detail/detail.css
  10. NSString *templatePath = [[NSBundle mainBundle] pathForResource:@"detail" ofType:@"html"];
  11. // Process the template and display the results.
  12. NSString *html = [engine processTemplateInFileAtPath:templatePath withVariables:nil];
  13. // 获得HTML
  14. self.htmlWebView = [[UIWebView alloc] initWithFrame:CGRectMake(8, 5, 304, 320)];
  15. self.htmlWebView.delegate = self;
  16. self.htmlWebView.userInteractionEnabled = NO;
  17. // 你就能加载到HTML里面的.css文件
  18. NSString *baseURL = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Detail"];
  19. [self.htmlWebView loadHTMLString:html baseURL:[NSURL fileURLWithPath:baseURL]];
  20. [self.detailView addSubview:self.htmlWebView];

因为我的UIWebView是在插入到UITableView,所以在UIWebView加载完后,就得重新计算高度。因为我想让用户感觉不到这其实是一个HTML。

  1. // 我将UIWebView添加到了self.detailView
  2. self.listTableView.tableHeaderView = self.detailView;
  1. #pragma mark -
  2. #pragma mark -# UIWebViewDelegate
  3. - (void)webViewDidFinishLoad:(UIWebView *)webView {
  4. // 获取整个HMTL的高度,这很好理解,很简单的JS
  5. NSString *heightString = [self.htmlWebView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"container\").offsetHeight;"];
  6. // 重设view内容大小
  7. CGRect nFrame = self.detailView.frame;
  8. nFrame.size.height = [heightString doubleValue] + 35.0;
  9. self.detailView.frame = nFrame;
  10. // 重设webview内容大小
  11. CGRect nWebViewFrame = self.htmlWebView.frame;
  12. nWebViewFrame.size.height = [heightString doubleValue] + 15;
  13. self.htmlWebView.frame = nWebViewFrame;
  14. // 让UIWebView加载完后,才设置UITableView,最后才加载评论
  15. [self tableViewSetting];
  16. [self getCommentList];
  17. }

以上的都是 MGTemplateEngine 很基本的使用,将来也会大派用场的。对于内容页的显示,没有比HTML来的更方便直接,通过切换模版和简单的参数设置,多个不同类型的栏目也可以使用同一个详细页,很大程度上减轻工作理和易于维护。

要更深入的了解,可以去 MGTemplateEngine 官方网站

MGTemplateEngine 模版引擎简单使用(转)的更多相关文章

  1. MGTemplateEngine 模版发动机简单使用

    https://github.com/nxtbgthng/MGTemplateEngine MGTemplateEngine 模版引擎 MGTemplateEngine比較象 PHP 中的 Smart ...

  2. 简单JavaScript模版引擎优化

    在上篇博客最简单的JavaScript模板引擎 说了一下一个最简单的JavaScript模版引擎的原理与实现,作出了一个简陋的版本,今天优化一下,使之能够胜任日常拼接html工作,先把上次写的模版函数 ...

  3. 简单的 js 模版引擎

    简单的 js 模版引擎 var tplEngine = function(tpl, data) { var reg = /<%([^%>]+)?%>/g, regOut = /(^( ...

  4. 构建自己的PHP框架--构建模版引擎(1)

    前段时间太忙,导致好久都没有更新博客了,今天抽出点时间来写一篇. 其实这个系列的博客很久没有更新了,之前想好好规划一下,再继续写,然后就放下了,今天再捡起来继续更新. 今天我们来说一下,如何构建自己的 ...

  5. js模版引擎handlebars.js实用教程——为什么选择Handlebars.js

    返回目录 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是: ...

  6. PHP模版引擎 – Twig

    在网站开发过程中模版引擎是必不可少的,PHP中用的最多的当属Smarty了.目前公司系统也是用的Smarty,如果要新增一个页面只需把网站的头.尾和左侧公共部分通过Smarty的include方式引入 ...

  7. Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs

    目录 前言 Express简介和安装 运行第一个基于express框架的Web 模版引擎 ejs express项目结构 express项目分析 app.set(name,value) app.use ...

  8. T4教程1 T4模版引擎之基础入门

    T4模版引擎之基础入门   额,T4好陌生的名字,和NuGet一样很悲催,不为世人所熟知,却又在背后默默无闻的奉献着,直到现在我们项目组的人除了我之外,其它人还是对其豪无兴趣,基本上是连看一眼都懒得看 ...

  9. T4教程2 T4模版引擎之生成数据库实体类

    T4模版引擎之生成数据库实体类   在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中 ...

随机推荐

  1. Check .NET Version with Inno Setup

    原文 http://www.kynosarges.org/DotNetVersion.html Inno Setup by Jordan Russell is a great installation ...

  2. C# 导出CSV功能记录下

    异常问题1: 如 机构编号 导出城CSV后,前面的四个0000不显示了, 解决办法 输出格式变为 =" 异常问题2: PPMABAT01:/MABATAPS/usr/ma_batas > ...

  3. word2vec 入门(二)使用教程篇

    word2vec 要解决问题: 在神经网络中学习将word映射成连续(高维)向量,这样通过训练,就可以把对文本内容的处理简化为K维向量空间中向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度 ...

  4. Linux内核中常见内存分配函数(二)

    常用内存分配函数 __get_free_pages unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) __get_f ...

  5. hdu 5623 KK's Number(dp)

    问题描述 我们可爱的KK有一个有趣的数学游戏:这个游戏需要两个人,有N\left(1\leq N\leq 5*{10}^{4} \right)N(1≤N≤5∗10​4​​)个数,每次KK都会先拿数.每 ...

  6. cocos2d js 怎样动态载入外部图片

    官网没有详细样例,仅仅有看api,研究成果例如以下 var that = this; var url = "http://xxxxxx"; cc.loader.loadImg(ur ...

  7. 在SSH框架中增加SiteMesh的支持

    1)引入jar包,如下两个jar包需要导入到系统的lib文件夹中: sitemesh-2.4.jar struts2-sitemesh-plugin-2.2.1.1.jar 2)修改web.xml增加 ...

  8. 查看Android系统当前运行的activity

    在Appium进行自动化测试的时候,往往需要知道你要测试的应用的包名和activity的名字,这样才可以进行自动化测试. 在我之前的博客中也提到了获取activity的名字,但是并不是很方便,甚至浪费 ...

  9. Windows SQL Server 2012 R2 安装Intel I217-V/I218-V网卡驱动(转)

    1.下载Intel官方驱动: https://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=23071&lang=zh ...

  10. nsstring 替换

    -(NSString*)searchaAndPlacing:(NSString*)string { NSString *text=[string stringByReplacingOccurrence ...