使用自定义单元格反转 UITableView

Posted

技术标签:

【中文标题】使用自定义单元格反转 UITableView【英文标题】:Reversing UITableView with custom cells 【发布时间】:2017-06-01 16:01:16 【问题描述】:

我有一个反向 UITableView,要反转它,我在 tableView 和每个单元格上应用 CGAffineTransform(scaleX: 1, y: -1)。

我使用自定义单元格(标签 + 2 个按钮)填充我的表格视图。 每个按钮都会在前一个单元格上方插入一个新的自定义单元格,依此类推。

自定义单元格数据通过本地 .plist 设置。

问题是在添加多个单元格后,行为发生了变化。当标签完成完全显示时,按钮会出现,但 button1 已经突出显示并且无法选择。 我不明白(并找到)为什么......

一个 git 项目揭示了一千多个单词,所以我的项目示例: https://github.com/cmii/ReverseTableView

在此示例中,插入第 5 个单元格时出现问题。

【问题讨论】:

我不在办公桌前,所以无法测试。我认为您正在使一个单元格出列,然后在不重置它的情况下使用它。系统创建的单元格仅足以容纳可见单元格。之后,它们被重新使用。使用表格视图 prepareCellForReuse 或在出列单元格后将属性设置为 nil。 是代码的问题吗:self.tableView.register(UINib(nibName: "ParagraphTableViewCellView", bundle: Bundle.main), forCellReuseIdentifier: "ParagraphTableViewCell") ?我读到它在 Swift 3.0 中是必要的 没有。这是因为您在上次使用单元格时已经更改了该单元格,并且在再次使用时没有撤消这些更改。 【参考方案1】:

您正在使单元格出列,然后在不重置的情况下使用它。系统创建的单元格仅足以容纳可见单元格。之后它们被重新使用。这是一个使用您的代码的示例。创建单元格时,请执行以下操作:

 //le bouton sélectionné est mis en avant
            if button == sender as! ChoiceButton 
                button.backgroundColor = UIColor.yellow
            

当你把它变成黄色,它从屏幕上消失,你把它出列,然后在没有“清理”的情况下重复使用单元格时会发生什么?即使不是 ChoiceButton,它也会是黄色的,因为它已经是黄色的了。

在您的 configureCell 方法中解决此问题的最简单方法。做同样的检查,但如果它不是一个选择按钮,你把它变回正常颜色(我将在这个例子中使用 clear):

   func configureCell(tableView: UITableView, cell: ParagraphTableViewCell, atIndexPath indexPath: IndexPath) 
...
     //le bouton sélectionné est mis en avant
                if button == <someBoolean> 
                    button.backgroundColor = UIColor.yellow
                 else 
                    button.backgroundColor = .clear
                
...

如果还有其他问题,现在您了解它们的来源,因此您应该能够自己解决它们。祝你好运! ?

【讨论】:

以上是关于使用自定义单元格反转 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 如何在自定义单元格中使用继承?

如何使用 MessageKit 创建自定义单元格?

自定义单元格未显示

如何使用 2 个或更多自定义单元格创建自定义 UICollectionView?

如何使用自定义 JTable 单元格编辑器和单元格渲染器

POI 使用XSSF导出Excel自定义单元格颜色为啥始终是黑色的?代码如下