【问题标题】:keep UISwitch state of a prototype cell when changing ViewControllers更改 ViewControllers 时保持原型单元的 UISwitch 状态
【发布时间】:2015-07-08 21:15:15
【问题描述】:

我有一个UITableViewCell 子类,我在其中连接了来自自定义原型单元的UISwitch。 (数据是从前一个 ViewController 在 Table View 中传递的)

当我更改视图控制器时,UISwitch 的状态会变回默认值 在浏览应用程序时,我需要一些方法来记住开关的状态。 我已经搜索了一些其他主题,但似乎没有什么适合我的情况。

代码如下:

import UIKit

class TableViewCell: UITableViewCell {

@IBOutlet weak var myStaticSwitch: UISwitch!
@IBOutlet weak var cellLabel: UILabel!
@IBAction func mySwitch(sender: UISwitch) {

    if myStaticSwitch.on {
    self.cellLabel.text = "on"
    //Do other things
    }
    else {
        self.cellLabel.text = "off"
    //Do other things
    }
}



override func awakeFromNib() {
    super.awakeFromNib()

    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

【问题讨论】:

    标签: uitableview swift uinavigationcontroller uiswitch


    【解决方案1】:

    这里是代码。现在我需要一种方法来单独引用每个 Switch,而不是作为一个整体引用。

    import UIKit
    
    class TableViewCell: UITableViewCell {
    
    
    
    @IBOutlet weak var myStaticSwitch: UISwitch!
    
    @IBAction func mySwitch(sender: UISwitch) {
    
    
        myStaticSwitch.on = (sender as UISwitch).on //Bool
        NSUserDefaults.standardUserDefaults().setBool(myStaticSwitch.on, forKey: "autoAdjustSettings")
        NSUserDefaults.standardUserDefaults().synchronize()
    
    }
    
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
    
    
    }
    
    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        myStaticSwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")
    
        // Configure the view for the selected state
    }
    
    }
    

    【讨论】:

      【解决方案2】:

      您应该有一个模型对象,用于确定表示它的 UI 的状态。这个对象可以保存到磁盘,使用 Core Data 持久化,甚至可以同步到远程 Web 服务。

      当您下次遇到需要显示与对象相关的任何 UI 时,您可以随时检查其属性以确定要显示的内容。然后,您的 UI 操作方法只需更新模型表示:

      @IBAction func mySwitch(sender: UISwitch) {
          myModelObject.enabled = myStaticSwitch.on
      }
      

      UI(例如,您的表格单元格)然后查找对 enabled 的更改并根据需要更新 cellLabel

      【讨论】:

      • 我想我理解建议的方式,但我缺乏一些基础知识。根据我的研究,模型对象是 TableViewCell 之外的一个类,但我应该如何将这些数据存储在那里?通过创建字典之类的?
      • stackoverflow.com/questions/19485119/… 是一个很好的起点
      • 我对上面的链接不太了解。这也是一个客观的。但我更接近我需要的东西,如下所示。虽然这一次,一旦一个 Switch 发生变化,当我访问同一个视图时,所有其他开关都会获得相同的状态
      猜你喜欢
      • 2015-04-17
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      相关资源
      最近更新 更多