iOS视图程序员iOS Developer

iOS实录1:UITableView构建UI界面

2017-04-01  本文已影响563人  南华coder

[这是第一篇]

导语:UITableView是iOS项目中使用相关广泛的UI组件,本文主要从构建界面方案的实现TableViewCell之间的通信Native动态化页面的野望(挖坑)三部分讨论了如何使用TableView构建比较常见的UI界面。

一、概述

1、问题#####
2、优势#####

采用分而治之的办法,将一个整体页面划分成若干部分,每一个部分就相当一类Cell,其实这么做是有好处的,好处如下:

3、解决方案

二、 构建界面方案的实现####

1、QSTableViewCell 和 QSTableViewCellModel

说明:cellClassName属性保存对应的Cell类的类名,可以利用反射来实现cell的创建。

2、实现UITableView代理方法

选择在TableViewController中实现UITableView的UITableViewDelegate、UITableViewDataSource的代理方法。在TableViewController中有顶一个dataSource数组,这个数组中存放的各个Cell对应的CellModel,利用cellModel中的信息,完成Cell的绘制和响应处理。以cell的创建、cell高度获取为例。

说明:self.cellFactory就是QSTableViewCellFactory对象,达到解耦的目的,使得Controller中代码更简洁。

3、上拉加载和下拉刷新

利用MJRefresh来实现TableView的上拉加载和下拉刷新。

总结: 使用UITableView构建页面,Controller继承自定义的TableViewController,使用Cell来定义视图,CellModel来定义视图上的内容和动作,然后将CellModel放入TableViewController的dataSource数组中,即可。

三、TableViewCell之间的通信####

在使用TableView组织页面的时候,有个非常值得考虑的问题,那就是TableViewCellCell之间的的通信。

1、概述#####
2、通信方案的使用#####

通信方案使用了QSMessageCenter,主要使用步骤如下:

说明:QSMessageCenter的具体详情参考iOS实录7:iOS通知中心的替换方案

四、Demo展示####

列表页效果图.png 详情页效果图

总结:这样的方案,为实现列表页、详情页省去了大量的时间,开发者只需要集中精力做好Cell的绘制、CellModel的定义即可。

五、Native动态化页面的野望(挖坑)

H5页面有个很大的优点,就是可以不用发版就可以更新页面内容;如果可以利用TableView实现动态化的Native页面,岂不是很完美的事情。然后,现实的需求和业务比较复杂多变,实现这样的方案,投入和产出比是多少,能不能达到目标,都不好判断。但是针对某些特性的场景,实现页面的动态化数据更新还是可以的。

1、数据描述界面的各个组成#####

使用的是JSON格式数据,由后台返回,如下所示(部分JSON数据):

{
   "body" :[{
      "type": 0, 
       "content": "http://xxxxxxxxxxxxxxxxxxxxx.jpg",
       "target":"appName://previewSingleImage"
    },
    {
        "type": 1, 
        "content": "H5页面有个很大的优点,就是可以不用发版就可以更新页面内容;如果可以利用TableView实现动态化的Native页面,岂不是很完美的事情....",
        "target":"appName://lookAllContent"
    },
    {
        "type": 2, 
        "content": "http://xxxxxxxxxxxxxxxxx.mp4",
        "target":"appName://playInFullScreen"
    }
    //其他略
  ]
//其他略
}

说明1:type定义的是内容的类型,如0是图片,1是文本,2是视频;content定义的是内容;tagert定义的是点击内容的行为;tagert值的是App中自己定义的协议,如appName://previewSingleImage表明点击图片Cell预览全图,appName://playInFullScreen是点击视频Cell,全屏播放视频。

2、动态化UI方案#####

有两种方案可以选:

1)在Native实现盛装不同数据类型的容器Cell,和Cell的响应处理行为。

说明:该方案没有深入下去,因为TableView处理的视图比较简单,而且还给后台带来比较大的负担(本来后台开发资源就紧张),后期考虑使用CollectionView来实现特定场景下较复杂的动态化界面。

2)将数据和展示需求拼接成H5代码,然后由WebView渲染出来,结合JS和WebViewJavascriptBridge处理Cell的响应处理行为。

说明:该方案是目前采纳的方法,一定程度上实现了页面的动态化,比直接加载H5页面快很多。但是也仅仅是适用于某些固定展示行为的模块,如文章详情页等。

3、 总结#####

End

上一篇下一篇

猜你喜欢

热点阅读