现在的位置: 首页 > 综合 > 正文

iOS 工作中遇到的一个tableView设计

2017年12月09日 ⁄ 综合 ⁄ 共 1160字 ⁄ 字号 评论关闭

使用自定义的tabelViewCell有一段时间了,自定义的tableViewCell在开发中非常常用,虽然对于其底层的实现和基本的原理了解得不是很透彻,但是经过多次使用,总觉得自己对其也算是比较熟悉了,直到今天开发遇到了UI组出的一个奇葩设计(或者是因为我才疏学浅),如下图:

如上图,红色为第一级目录,原始状态只有红色的cell,可以看到,红色的cell是用plain的tableView风格排列的,但点击了红色的cell后,产生展开的感觉,展开后就是如上图所示的tableViewCellstyleValue1的tableViewCell 蓝色为cell 的textLabel,绿色为detailLabel,这时可以开到,tableView的风格,又变成了grouped。黄色部分为headerViewtitle。

所以,这个tableView到底是要用plain风格还是要用grouped风格,我想了很久,其实实现的方法可以很多,但是感觉的都比较麻烦。我问了一个比我资深的同事,他提供了两种方法。一:用plain风格,然后把所有视觉上看到的行都看作是一个cell,一个一个地去插入,如一个灰色的分割条是一个cell,然后每个有蓝绿色的行又是一个Cell,如下:

做为一个cell

做为一个cell

做为一个cell

这样的确可以实现,但是UI是实现了,但是背后的逻辑呢?以我的智商,我觉得是复杂到了极点,所以我在这个基础上先了另一个基于plain tabelView的方法,就是把

做为一个cell,

这样做貌似简单了很多,的确,这样做比我同事说的优化了那么一点,但是其实这后面的逻辑还是非常的复杂,因为我们知道,展开后的数据其实都是属于展开前那个cell的,如果把这些数据一个个地独立开,数据的操作将会非常的麻烦。

我同事提出的第二个方法,当然就是用grouped的tableView了,他的意思就是把三个根cell也做为section,点击了,再往中间插section,这样除了有上述一样的复杂逻辑以外,还有一个问题就是,初始状态,没有展开的时候,用grouped排列的几个只有一个row的section,是很难做得想plain那样美观,因为有header和footer的存在。

所以,我最后想到的办法,就是把展开的数据都放到一个Cell中去,所以这里就必须实现一个比较疯狂的事情,也是我之前一直没有尝试过的,在一个tableView的tableViewCell中再插入一个tableView,用这个方法,就可以很好的解决上述的问题了。

初始状态是plain,展开后只插入一个cell,这个cell中包含一个grouped的tableView,这个tableView里装的都是来自于同一个数据源的数据。这样就可以美观和逻辑简单都实现了。

抱歉!评论已关闭.