美文网首页
iOS中的UIWebView的混合编程

iOS中的UIWebView的混合编程

作者: 海绵宝宝不要哭 | 来源:发表于2016-07-08 21:28 被阅读200次

    1:基于为何要使用UIWebView来开发,页面的都具有以下共同特点

    a:排版复杂。通常包括图片和文字的混排,还有可能有链接需要支持点击。如果不用UIWebView,自己用原生控件通过拼接来实现,由于界面元素太多,做起来会很困难,而如果用CoreText来实现,就需要自己视线相当多的复杂拍版逻辑 。

    b:界面的变法需求频繁,列如淘宝的彩票页面,可能常常需要更新界面以推出不同的活动,采用UIWebView实现后,这类页面就可以动态的更新而不用向AppStore提交新的版本,而原生实现的界面很难达到如此的灵活性。

    c:界面对用户的交互需求不复杂,因为UIWebView实现的交互效果与原生的效果相比还是会大打折扣,所以这类界面通畅都没有复杂的交互效果,这也是主流应用大多采用混合UIWebView来实现应用界面而不是使用纯UIWebView来实现界面的原因。

    2:使用模版引擎来渲染HTML界面

    在实际开发中,UIWebView控件接受一个HTML内容,用于呈现相应的界面,下面是API的接口:

    - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
    

    由于HTML内容通常是变法的,所以我们需要在内存中生成该HTML内容。比较简单粗暴的做法是将该HTML的几本内容定义在一个NSString中,然后用objc [NSString stringWithFormat]的方法将内容进行格式化,下面是一个实列:

    -(NSString *)demoFormatWithName:(NSString *)name valur:(NSString *)value{
        
        NSString *html =
        @"<HTML>"
        "<HEAD>"
        "</HEAD>"
        "<BODY>"
        "<H1>%@</H1>"
        "<P>%@</P>"
        "</BODY>"
        "</HTML>";
        
        NSString *content = [NSString stringWithFormat:html,name,value];
        return content;
    }
    

    但其实我们看出,这样写并不舒服,因为:

    1:模块内容和代码混在一起,既不方便阅读,也不方便更改
    2:模版的渲染逻辑使用简单的objc [NSString stringWithFormat]来完成,功能单一。在实际开发中,我们很可能需要将原始数据进行二次处理,而这些如果模版渲染模块不能支持,我们就只能自己手工写这部分的数据二次处理,耗时耗力,例如:微博的详情界面,如果微博的发送时间小于一天,则需要显示成“xxx小时前”,如果小于1分钟,则需要显示成“刚刚”。这些界面渲染方法的逻辑如果能够抽取到专门的排版代码中,就能清晰很多。

    所以我们需要一个模版引擎,专门复杂这类的渲染的工作,我个人使用过的模版MGTemplateEngine(https://github.com/mattgemmell/MGTemplateEngine),它的模版语言比较像Smarty,FreeMarket和Django。另外它可以自己定义Filter,以便实现上面提到的自定义渲染逻辑,他需要依赖 RegexKit, RegexKit是一个正则表达式工具类,提供强大的正则表达式工具类,提供强大的正则表达式匹配的替换功能。
    不喜欢模版引擎功能太过于复杂的朋友,也可以尝试GRMustache(https://github.com/groue/GRMustache),它比MGTemplateEngine,GRMustache的功能更简单,另外GRMustache在开源社区更加活跃,更新更频繁。
    对于上面的示咧代码,在使用GRMustache模版后,我们首先需要调整模版的内容:
    1:将模版内容放在另一个单独的文件中,方便日后更改。
    2:将原来的%@,替换{{ name }}的形式。
    模版调整后变成以下内容(文件名为template.html):

    
    <HTML>
    
    

    还没有结束……

    相关文章

      网友评论

          本文标题:iOS中的UIWebView的混合编程

          本文链接:https://www.haomeiwen.com/subject/nedrjttx.html