我在自定义UISwitch
中与TableViewCell
进行了挣扎。
UITableViewCell
中的开关将单元格中的项目添加到另一个数组中。但是,我注意到当我更换开关时,它也会改变其他单元中的其他开关。
我认为问题出在TableView dequeueReusableCell
函数上。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "currencyCell") as? currencyCell else { return UITableViewCell() }
}
答案 0 :(得分:1)
您必须将交换机的值存储在某处"外部" UITableviewCell
能够将其重置为特定交换机在该单元格中的最后一个值。
我建议使用委托模式将其从单元格中保存(例如,当UISwitch's
值更改时)。然后在你取消单元格之后从tableView:cellForRowAt:
函数设置它。
答案 1 :(得分:0)
我也有同样的问题。问一位高级开发人员,他建议因为在UITableView
单元格中重复使用。当将UISwitch
中的第一个UITableView
的状态更改为ON并向下滚动时,将重用具有第一个开关的单元格,因此默认情况下,某些后续开关将显示为ON。
将第一个UISwitch
置为ON不会改变UITableView
中其他开关的状态。相反,第一个开关正在重复使用。
因此,对此的解决方案是将每个单元格中的UISwitch
与某些数据绑定。作为一个例子(伪代码):
public class ABC: UITableViewCell
{
.
.
.
.
public void UpdateCell(bool switchStatus)
{
SwitchInCell.On = switchStatus
}
}
从继承UITableViewSource
类的类调用UpdateCell 方法。
(注意:我来自C#后台并使用Xamarin为iOS开发。所以上面的伪代码在C#中。但可以很容易地转移到Swift。)
我希望这会有所帮助。