在自定义单元格 Swift 中保存 uibutton 状态

Posted

技术标签:

【中文标题】在自定义单元格 Swift 中保存 uibutton 状态【英文标题】:Saving uibutton state in custom cell Swift 【发布时间】:2015-09-14 16:22:30 【问题描述】:

我有一个custom cell 和两个uibuttons。 单击其中一个按钮会附加基于带有两个 uibuttons 的自定义单元格的行。

单击按钮后,我将其 alpha 更改为 50%,并将布尔值 isPressed 设置为 true。所以下次用户按下按钮时,它会产生一个错误的alert view

问题是 - 每次我滚动时 - 带有按钮的单元格被重复使用,并且这两个规则应用混乱。

我已经浏览了堆栈上的答案,但没有看到任何对我有帮助的东西,尤其是在 swift 中。我知道可以创建一个数组,用booleanindexPath.rowcurrentTitle 对象附加它——然后在滚动表格视图时以某种方式使用这个数组。但实施对我来说不是很清楚。更困难的是我一排有两个按钮。

不胜感激有关该主题的任何帮助。

谢谢。

【问题讨论】:

【参考方案1】:

在 objc 中实现的想法是这样的:

    创建一个大小等于单元格数的 NSArray。

    用像[NSNumber numberWithBOOL:NO]这样的对象初始化它(或 YES 如果你需要按下状态)在你打电话之前[self.tableView reloadData];

    在方法cellForRowAtIndexPath中检查是否 [array[indexPath.row] boolValue] 是或否并设置按钮 状态。

希望它会有所帮助。

【讨论】:

【参考方案2】:

有很多关于表格视图的教程。 Like here。您需要将数据模型(例如是否按下按钮)与视图(表格中的单元格和按钮)分开。如果这个想法不清楚,你会想要查找 MVC(模型视图控制器)或 MVVM(模型视图视图模型)。

这个想法是,你有一个记录,例如在一个数组中,你的表中的所有项目应该是什么样子,不管它们是否在屏幕上。当您需要显示一个单元格时,您可以根据数组中的信息将其当前状态(因为它正在被回收)覆盖为它应该是的状态。

【讨论】:

我已经实现了 tableview,它工作得很好。唯一的问题仍然存在 - 保存一系列按钮的单击状态并将其覆盖为应有的状态。您能否进一步解释一下,“所有项目应该是什么样子”是什么意思 - 我在数组中放入了哪些确切信息?那么如何根据数组检查按钮的状态呢? 您需要一个对象来为您的数据建模。例如,一个简单的struct 带有两个布尔值,每个布尔值表示您的一个按钮是否被按下。然后您将拥有这些structs 的数组。该表将根据数组中的项目数进行填充,并且在数据源的tableView(_:cellForRowAtIndexPath:) 中,您应该根据索引indexPath.row 的数组中的结构中的信息更新单元格。

以上是关于在自定义单元格 Swift 中保存 uibutton 状态的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift:在自定义 UITableView 单元格中更新二维数组时获取重复值

如何在自定义表格视图单元格中保存文本字段

在自定义表格视图单元格中设置 UIButton 的高度

Swift:自定义单元格中的 IBoutlets 为零

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

iOS swift UIImageView更改tableView单元格中的图像