【问题标题】:Why changing switch in TableViewCell affects other switches in other cells?为什么更改 TableViewCell 中的开关会影响其他单元格中的其他开关?
【发布时间】:2017-10-19 13:24:14
【问题描述】:

我在自定义TableViewCell 中使用我的UISwitch

UITableViewCell 中的开关将单元格中的项目添加到另一个数组中。但是,我注意到当我更改一个开关时,它也会更改其他单元格中的其他开关。

我认为问题出在 TableView dequeueReusableCell 函数上。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "currencyCell") as? currencyCell else { return UITableViewCell() }
}

【问题讨论】:

  • 代码不足以说明问题所在,但我假设您在返回单元格之前没有在 tableView:cellForRowAt: 方法中重置 UISwitch 的值?
  • 请简要说明您的问题?
  • 你好 TawaNicolas,你是对的,我无法重置它。你能告诉我怎么做吗?我可以通过“cell.switchBtn(UISwitch)”访问它。但是,不知道在 (UISwitch) 部分放什么。非常感谢!

标签: ios swift uitableview uiswitch


【解决方案1】:

您必须将开关的值存储在UITableviewCell“外部”的某个位置,以便能够将其重置为特定开关在该单元格中的最后一个值。 我建议使用委托模式将其从单元格中保存(例如,当 UISwitch's 值更改时)。然后在您对单元格进行队列处理后,从 tableView:cellForRowAt: 函数中设置它。

【讨论】:

  • 你好 Bence,我实际上已经在原型单元格中使用委托方法设置 UISwitch。但是我找不到在返回单元格之前在 tableView:cellForRowAt: 函数中设置它的方法。我得到的唯一选择是“cell.switchBtn(UISwitch)”。那么如何将其设置为 isOn == false 以便新单元格不会受到影响。非常感谢!
  • 关于这个,请阅读这篇文章:makeapppie.com/2016/10/17/custom-table-view-cells-in-swift-3
  • 你好 Bence,我已经阅读了这篇文章,但是它没有提到改变 Prototype Cell 的孩子的价值。我只想知道如何在返回新单元格之前更改 TableView:cellForRowAt 中的 UISwitch 的值。感谢您的时间和回答。非常感谢。
  • 您必须创建一个 UITableViewCell 子类,例如SwitchTableViewCell,然后在 cellForRowAt 方法中将出列单元格转换为: if let switchCell = cell as?切换表视图单元。而且,如果您使用插座将故事板单元的开关连接到此 SwitchTableViewCell,您将能够到达它。
【解决方案2】:

我也遇到了同样的问题。问了一位资深开发者,他建议因为UITableView中的单元格被重用了。当一个人将UITableView 中的第一个UISwitch 的状态更改为ON 并向下滚动时,具有第一个开关的单元格被重用,因此默认情况下将一些后续开关显示为ON。

打开第一个UISwitch 不会改变UITableView 中其他开关的状态。相反,第一个开关正在被重复使用。

因此,解决此问题的方法是将每个单元格中的UISwitch 与一些数据绑定。举个例子(伪代码):

public class ABC: UITableViewCell
{
    .
    .
    .
    .
    public void UpdateCell(bool switchStatus)
    {
        SwitchInCell.On = switchStatus
    }
}

UpdateCell 方法是从继承UITableViewSource 类的类调用的。

(注意:我来自 C# 背景,使用 Xamarin 为 iOS 开发。所以上面的伪代码是 C#。但可以很容易地转移到 Swift。)

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    相关资源
    最近更新 更多