Ios 为什么更改TableViewCell中的开关会影响其他单元格中的其他开关?
我正在自定义的Ios 为什么更改TableViewCell中的开关会影响其他单元格中的其他开关?,ios,swift,uitableview,uiswitch,Ios,Swift,Uitableview,Uiswitch,我正在自定义的TableViewCell中努力使用我的ui开关 UITableViewCell中的开关将该单元格中的项添加到另一个数组中。然而,我注意到,当我改变一个开关时,它也会改变其他单元格中的其他开关 我认为问题在于TableViewdequeueReusableCell函数 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guar
TableViewCell
中努力使用我的ui开关
UITableViewCell
中的开关将该单元格中的项添加到另一个数组中。然而,我注意到,当我改变一个开关时,它也会改变其他单元格中的其他开关
我认为问题在于TableViewdequeueReusableCell
函数
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "currencyCell") as? currencyCell else { return UITableViewCell() }
}
您必须将开关的值存储在UITableviewCell
之外的某个位置,才能将其重置为特定开关位于该单元格中的最后一个值。
我建议使用委托模式从单元格中保存它(例如,ui开关的
值更改时)。然后在取消单元格的设置后,从表视图:cellForRowAt:
函数中进行设置。我也遇到了同样的问题。一位高级开发人员问道,他建议,因为在UITableView
中,单元格是重用的。当将UITableView
中第一个UISwitch
的状态更改为ON并向下滚动时,将重用带有第一个开关的单元格,因此默认情况下,随后的一些开关显示为ON
打开第一个UISwitch
不会改变UITableView
中其他开关的状态。相反,第一个开关被重用
因此,解决这个问题的方法是将每个单元格中的UISwitch
与一些数据绑定。例如(伪代码):
UpdateCell方法是从继承UITableViewSource
类的类调用的
(注意:我来自C#背景,使用Xamarin为iOS开发。因此上面的伪代码是C#的,但可以很容易地转移到Swift。)
我希望这能有所帮助。这还不足以说明问题所在,但我假设您没有在返回单元格之前重置表视图:cellForRowAt:
方法中的ui开关的值?请简要解释您的问题是什么?您好TawaNicolas,您是对的,我无法重置它。你能告诉我怎么做吗?我可以通过“cell.switchBtn(UISwitch)”访问它。但是,不知道在(UISwitch)部分中放什么。非常感谢你!Hello Bence,我实际上已经在原型单元中使用委托方法设置UISwitch。但是,在返回单元格之前,我找不到在tableView:cellForRowAt:function中设置它的方法。我得到的唯一选项是“cell.switchBtn(UISwitch)”。那么我如何将其设置为isOn==false,这样新的单元格就不会受到影响。非常感谢你!关于这一点,请阅读这篇文章:你好,本斯,我已经阅读了这篇文章,但它没有提到改变原型细胞的孩子的价值。我只想知道如何在返回新单元格之前更改TableView:cellForRowAt中UISwitch的值。谢谢你的时间和回答。非常感谢。您必须创建一个UITableViewCell子类,例如SwitchTableViewCell,然后在cellForRowAt方法中强制转换出列的单元格,如:if let switchCell=cell as?SwitchTableViewCell。如果您用插座将开关从故事板单元连接到这个SwitchTableViewCell,您将能够到达它。
public class ABC: UITableViewCell
{
.
.
.
.
public void UpdateCell(bool switchStatus)
{
SwitchInCell.On = switchStatus
}
}