在动态UITableViewCell的顶部添加单元格

时间:2017-12-28 15:20:48

标签: ios swift uitableview

我在tableView顶部的新部分添加一个带有标签的单元格作为第0部分,我根据我显示的数据类型显示和隐藏此部分。

当hashtag类型的帖子中没有数据时它工作正常然后当数据中显示的hashtag数据就像两个或三个项目一样正常工作时会显示顶部0单元格然后当我向下滚动时在尝试返回顶部单元格后,我在AppDelegate中收到错误。

我知道这个问题有点复杂,但我想要实现的是根据我在{中显示的数据类型 - 显示和隐藏我的Feed顶部的单元格{1}}。如果hashtag新闻Feed数据显示第0部分中的顶部单元格,如果在tableview中显示普通新闻Feed,则只返回一个部分,并且不加载顶部部分,其中包含单元格。

顺便说一下,我将单元显示为Nib。并在tableview

中声明它
viewDidLoad
  

线程1:EXC_BREAKPOINT(代码= 1,子代码= 0x102a772a0)

let reloadNib = UINib(nibName: "ReloadTableViewCell", bundle: nil)
    feedTableView.register(reloadNib, forCellReuseIdentifier: "reloadCell")

以下是我实现的内容的屏幕截图,但是当我向下滚动然后向上滚动时,它会重新加载顶部单元格" Reload Feeds"然后是错误。

enter image description here

2 个答案:

答案 0 :(得分:1)

我不能100%确定你不知道你得到的确切错误,或者知道其他地方的代码是否存在其他问题,但是:

作为一般规则,从表格视图中出列两次并返回单个单元格会以奇怪和神秘的方式做坏事。将代码重构为仅在需要时取消常规单元格,而不是在显示刷新按钮时执行此操作

答案 1 :(得分:1)

由于只有两个部分,并且您有重复的代码,因此可以简化为:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    if indexPath.section == 0 && hashPostsOnly
    {
        let reloadCell = tableView.dequeueReusableCell(withIdentifier: "reloadCell", for: indexPath) as! ReloadTableViewCell

        return reloadCell
    }
    else
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "postCell", for: indexPath) as! PostTableViewCell

        //For the protocol delegate i made
        cell.delegate = self
        cell.feed = feeds[indexPath.row]
        cell.postCommentTextView.tag = indexPath.row
        cell.cellIndexPath = indexPath
        cell.userProfilePhotoBtn.tag = indexPath.row
        cell.postMoreCommentsBtn.tag = indexPath.row
        cell.postMoreCommentsBtn.addTarget(self, action: #selector(moreCommentsTapped(_:)), for: .touchUpInside)

        return cell
    }
}