在自定义单元格 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 中。我知道可以创建一个数组,用boolean
、indexPath.row
或currentTitle
对象附加它——然后在滚动表格视图时以某种方式使用这个数组。但实施对我来说不是很清楚。更困难的是我一排有两个按钮。
不胜感激有关该主题的任何帮助。
谢谢。
【问题讨论】:
【参考方案1】:在 objc 中实现的想法是这样的:
创建一个大小等于单元格数的 NSArray。
用像[NSNumber numberWithBOOL:NO]
这样的对象初始化它(或
YES
如果你需要按下状态)在你打电话之前[self.tableView reloadData];
cellForRowAtIndexPath
中检查是否
[array[indexPath.row] boolValue]
是或否并设置按钮
状态。
希望它会有所帮助。
【讨论】:
【参考方案2】:有很多关于表格视图的教程。 Like here。您需要将数据模型(例如是否按下按钮)与视图(表格中的单元格和按钮)分开。如果这个想法不清楚,你会想要查找 MVC(模型视图控制器)或 MVVM(模型视图视图模型)。
这个想法是,你有一个记录,例如在一个数组中,你的表中的所有项目应该是什么样子,不管它们是否在屏幕上。当您需要显示一个单元格时,您可以根据数组中的信息将其当前状态(因为它正在被回收)覆盖为它应该是的状态。
【讨论】:
我已经实现了 tableview,它工作得很好。唯一的问题仍然存在 - 保存一系列按钮的单击状态并将其覆盖为应有的状态。您能否进一步解释一下,“所有项目应该是什么样子”是什么意思 - 我在数组中放入了哪些确切信息?那么如何根据数组检查按钮的状态呢? 您需要一个对象来为您的数据建模。例如,一个简单的struct
带有两个布尔值,每个布尔值表示您的一个按钮是否被按下。然后您将拥有这些struct
s 的数组。该表将根据数组中的项目数进行填充,并且在数据源的tableView(_:cellForRowAtIndexPath:)
中,您应该根据索引indexPath.row
的数组中的结构中的信息更新单元格。以上是关于在自定义单元格 Swift 中保存 uibutton 状态的主要内容,如果未能解决你的问题,请参考以下文章