首页 > UITableView 没有数据时的 placeholder 怎么设计比较好呢?

UITableView 没有数据时的 placeholder 怎么设计比较好呢?

一般 UITableView 在 loading 数据的时候要展示一个 loading,在没有数据的时候要展示一个 placeholder(比如『您还没有收藏 xxxx』之类的)。想问下大家,这种东西怎么设计比较好呢?

有几个需要考虑的问题:

  1. 最好是能做得比较通用,不同 tableView 用起来要重复写的代码较少;最好 UITableView 和 UICollectionView 能用一套

  2. 可能需要接收点击事件

  3. 我感觉最难的一个问题时,有时会出现用 tab 切换 dataSource 的情况,这几个 dataSource 是共用一个 placeholder 还是分别持有一个 placeholder 呢?并且还需要考虑一个 dataSource 用在数个地方的情况(比如 公共的 xxx 列表和 用户收藏的 xxx 列表,cell都一样,但 placeholder 可能会不一样)

我现在能想到几种方法,都看到有某些 app 在使用的例子。

  1. 把 placeholder 放在底层,tableView 放在上层,然后 tableView 在没有数据时的 backgroundColor 设成透明,有数据时设成不透明。这样透明的时候就自然把底下的 placeholder 透出来了。
    缺点:不能接收点击事件。

  2. 把 placeholder 设为 tableView footer 或 tableView cell
    缺点:tableView 和 collectionView 没法用同一个 cell。另外,如果用 footer 的话 collectionView 不太方便,用 cell 的话每个 tableView 的 cellForRow、heightForRow 里面都得加这种特殊情况处理 cell 的代码,会有大量重复代码,没法做得很通用。

  3. 一个单独的 view 盖在 tableView 上面
    好像较少看到有这么做的。

今天看了一下才发现不少 app 在这个地方是做得很不好的,比如随便看了下小红书,单用户那儿的 placeholder 就有好多种,实现方法也可以猜出是五花八门(有些跟着 tableView 一起滚,有些不跟着滚,有些可以看出是在 tableView 下一层的)。

抛砖引玉,想问问大家对这个问题是怎么做的?~ 有没有什么好的经验可以分享呢?谢谢!


可以参考一下

感觉这个更适合你


之前看到别人写的
https://github.com/ChenYilong/CYLTableViewPlaceHolder
http://www.jianshu.com/p/e39699b0d134

另外可以将 placeHolder 设置为 tableView 的 backgroundView 嘛?
这个不是最简单咩?

不过我的做法是,因为是使用 MJRefresh
在加载时,头部就会有加载提示,加载完提示会自动消失
也算是比较偷懒的


做法1可以改成**没有数据的时候bringSubviewToFrontplaceholder 移到最上层。
做法3没有数据的时候隐藏那个placeholder
个人用的做法3,这样placeholder 可以上下滚动



把所有的vc继承一个带以下所有状态的view的vc,给model设置一个state状态,开始请求的时候busy,请求结束free,然后去choose哪个是你要的状态来显示界面。
- (void)chooseView {

//// 显示正常页面
if ([self.model itemCount]) {
    [self showRightView];
    return;
}

//// 显示加载页面
if (self.model.modelState == YZModelState_Busy) {
    [self showLoadingView];
    return;
}

//// 显示空页面
if (self.model.modelState == YZModelState_Free &&
    ![self.model itemCount])
{
    [self showEmptyView];
    return;
}

// 显示出错或者空页面
[self showErrorView];
}
【热门文章】
【热门文章】