首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向下滚动时不显示Swift Expandable单元格按钮

向下滚动时不显示Swift Expandable单元格按钮
EN

Stack Overflow用户
提问于 2020-06-01 01:12:24
回答 1查看 138关注 0票数 0

当滚动离开屏幕时,我的自定义单元格处于展开状态,按钮被隐藏,这不应该是这种情况。在标签下面,再次向上滚动时没有显示两个按钮。我猜在信元出队后需要做些什么。任何帮助都将不胜感激。

我有一个自定义单元格,其中行的初始高度是80,单击单元格后它会扩展到120。默认情况下,我会像这样隐藏按钮:

代码语言:javascript
复制
    @IBOutlet weak var followButton: UIButton! {
        didSet {
            followButton.isHidden = true
        }
    }

    @IBOutlet weak var blockButton: UIButton! {
        didSet {
            blockButton.isHidden = true
        }
    }

我有一个var expandedIndexSet : IndexSet = [],它可以跟踪哪个单元格已经展开。下面的方法相应地更新indexSet。

代码语言:javascript
复制
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        tableView.beginUpdates()
        let cell = tableView.cellForRow(at: indexPath) as! StackOverflowTableViewCell

        if(expandedIndexSet.contains(indexPath.row)){
            expandedIndexSet.remove(indexPath.row)
        } else {
            expandedIndexSet.insert(indexPath.row)
        }

        cell.blockButton.isHidden = !cell.blockButton.isHidden
        cell.followButton.isHidden = !cell.followButton.isHidden

        tableView.endUpdates()
    }

高度的调整是这样的:

代码语言:javascript
复制
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if expandedIndexSet.contains(indexPath.row) {
            return 140
        }
        else {
            return 80
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2020-06-01 05:18:23

下面的代码片段可能会有帮助,请尝试。

代码语言:javascript
复制
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = ....

         cell.followButton.isHidden = !expandedIndexSet.contains(indexPath.row)
         cell.blockButton.isHidden = cell.followButton.isHidden

         return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)

        // Update View Model
        if(expandedIndexSet.contains(indexPath.row)){
            expandedIndexSet.remove(indexPath.row)
        } else {
            expandedIndexSet.insert(indexPath.row)
        }

        // Table View Animation
        tableView.beginUpdates()
        tableView.reloadRows(at: indexPaths, with: .automatic)
        tableView.endUpdates()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62119790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档