方案一:
一个tableview,三个数据数组(一个最新,一个最热,一个指针引用),然后用segment切换来控制tableview的加载数据,切换时用reloaddata重新加载需要显示的数据。需要说明tableview加了下拉刷新的功能。
实现:功能已实现。
问题:
切换时重新加载内容,徒增性能损耗;
因为cell中有作者头像,是从互联网上加载的,因此每次重新加载tableview时都重新下载一遍头像,这对流量无端的损耗是不可饶恕的,是注定要被用户抛弃的。即使使用了异步加载,图像缓存技术,但是这个隐患还是很大。
滚动位置在切换时丢失,这个丢失是对用户体验而言的。实际是两个数据源大小不同,tableview的显示位置固定,影响用户体验。
下拉刷新完成后也会重新加载内容,如果刷新中切换页面,可能导致刷新内容丢失,或者刷新提示混乱。
试图解决方案:在界面上创建两个tableview实例,因为两个列表内容格式和显示样式完全一致,因此复用默认的tableview,最恰当。因此我就希望用深度复制的办法创建一个新的实例,这样两个tableview互不影响,又达到复用的目的,但是遗憾的是复制实例,报错,貌似不支持。
方案二:
顺着方案一的思路,在界面上方两个tableview,为了复用性,我们在storyboard上的view上拖一个tableview,绑定自定义的blogtableview类。界面会自动创建一个tableview,我们在界面初始化函数中再创建一个blogtableview实例,因为这个类绑定了界面,因此实例后就能复用了界面上的格式和布局了(我是这么认为的,刚好用这个方案验证类和界面绑定的关系),我们把刷新函数和数据源,代理函数全放在自定义类中,彻底分离两个列表实例。主界面类只负责tableview实例创建和界面切面的工作。这样原来一个类实现的功能就要放到一个控制类一个业务类中了,其实我觉得这个分离是合理优化。
实现:等下了火车验证。
方案三:
在界面上拖两个tableview,格式和布局完全一样,这种方案我是接受不了的。