【问题标题】:How to save changed state of dynamic created UISwitch in CoreData model in Swift?如何在 Swift 的 CoreData 模型中保存动态创建的 UISwitch 的更改状态?
【发布时间】:2016-11-27 21:18:05
【问题描述】:

我有一个 UITableView 包含用户添加的动态单元格。每个单元格有一个UILabel 和一个UISwitch。开关的默认状态为 ON。每当用户添加这些值时,我都会将这些值保存在 CoreData 模型中(UILabel 为字符串,UISwitchBool)。 每当用户切换开关时,我想在 CoreData 模型中的同一单元格中更新/存储与标签值相对应的开关状态。我已将标签 (switch.tag = indexPath.row) 添加到行中的每个开关,并且可以通过在我的 cellChanged 函数中使用 sender.tag 来访问它。但我无法获取已切换开关的那一行的标签。如果我能以某种方式获取与切换的开关相对应的标签值,那么我可以运行一个 for 循环以在CoreData 模型中查找该标签值,然后设置UISwitch 的状态。由于我使用的是Swift 语言,如果您能解释使用相同的代码,我将不胜感激。

【问题讨论】:

  • 为什么要在CoreData中存储标签,这些标签会改变吗?
  • 这些标签存储了用户选择的时间值。
  • 很公平。我可以假设您存储NSDates 吗?
  • 是 NSDates 作为字符串
  • 您不应该尝试获取标签的值以确定哪个 CoreData 对象已被更新。您应该使用 sender.tag(即 indexPath.row)直接从数据源中获取对象。

标签: ios swift uitableview core-data uiswitch


【解决方案1】:

这对我有用:

func switchTapped(sender:UISwitch) {
let switchPosition = sender.convertPoint(CGPointZero, toView: self.tableView)
let indexPath = self.tableView.indexPathForRowAtPoint(switchPosition)

}

【讨论】:

    【解决方案2】:

    更好的模式是在单元格中创建协议。像

    @protocol MyCellDelegate{
    func cellSwitchChanged(forCell: MyCell, toValue: Bool, withLabel: String?)
    }
    
    class MyCell: UITableVeiwCell{
    weak veer delegate: MyCellDelegate
    .
    .
    .
    
    @IBaction handleSwitchChanged(sender: UISwitch){
    self.delegate?.cellSwitchChanged(forCell: self, toValue: sender.value, withLabel: self.lblName.text) 
    }
    }
    

    然后在你的单元格中为行索引路径,分配你 vc 作为单元格的代表。并覆盖此方法。

    所以每次开关改变时,视图控制器都会获取单元格引用、开关值和文本标签。然后您可以在此处进行核心数据更新操作。

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 2015-04-17
      • 2015-07-08
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多