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
中的开关将该单元格中的项添加到另一个数组中。然而,我注意到,当我改变一个开关时,它也会改变其他单元格中的其他开关

我认为问题在于TableView
dequeueReusableCell
函数

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
    }
}