一般 UITableView 在 loading 数据的时候要展示一个 loading,在没有数据的时候要展示一个 placeholder(比如『您还没有收藏 xxxx』之类的)。想问下大家,这种东西怎么设计比较好呢?
有几个需要考虑的问题:
最好是能做得比较通用,不同 tableView 用起来要重复写的代码较少;最好 UITableView 和 UICollectionView 能用一套
可能需要接收点击事件
我感觉最难的一个问题时,有时会出现用 tab 切换 dataSource 的情况,这几个 dataSource 是共用一个 placeholder 还是分别持有一个 placeholder 呢?并且还需要考虑一个 dataSource 用在数个地方的情况(比如 公共的 xxx 列表和 用户收藏的 xxx 列表,cell都一样,但 placeholder 可能会不一样)
我现在能想到几种方法,都看到有某些 app 在使用的例子。
把 placeholder 放在底层,tableView 放在上层,然后 tableView 在没有数据时的 backgroundColor 设成透明,有数据时设成不透明。这样透明的时候就自然把底下的 placeholder 透出来了。
缺点:不能接收点击事件。把 placeholder 设为 tableView footer 或 tableView cell
缺点:tableView 和 collectionView 没法用同一个 cell。另外,如果用 footer 的话 collectionView 不太方便,用 cell 的话每个 tableView 的 cellForRow、heightForRow 里面都得加这种特殊情况处理 cell 的代码,会有大量重复代码,没法做得很通用。一个单独的 view 盖在 tableView 上面
好像较少看到有这么做的。
今天看了一下才发现不少 app 在这个地方是做得很不好的,比如随便看了下小红书,单用户那儿的 placeholder 就有好多种,实现方法也可以猜出是五花八门(有些跟着 tableView 一起滚,有些不跟着滚,有些可以看出是在 tableView 下一层的)。
抛砖引玉,想问问大家对这个问题是怎么做的?~ 有没有什么好的经验可以分享呢?谢谢!
之前看到别人写的
https://github.com/ChenYilong/CYLTableViewPlaceHolder
http://www.jianshu.com/p/e39699b0d134
另外可以将 placeHolder 设置为 tableView 的 backgroundView 嘛?
这个不是最简单咩?
不过我的做法是,因为是使用 MJRefresh
在加载时,头部就会有加载提示,加载完提示会自动消失
也算是比较偷懒的