返回tableview时,复选标记消失

时间:2015-09-04 16:46:19

标签: swift tableview checkmark

我有一个没有segue的静态单元格表​​视图。这与iPhone设置 - >声音 - >文本音调相同。实现复选标记并从另一个ViewController播放该系统声音没有问题。返回声音设置ViewController时没有选中标记。我在用户默认值中保存indexPath.row和indexPath.section。我正在检索它并将它们存储在变量中。如何使用这些变量现在具有indexPath“一行一行,一行一节”来指示先前选择的行。我已尝试过网络上的解决方案,视频和StackoverFlow,我似乎无法得到这个。

var rowSelected:Int = 0
var rowSection:Int = 0

override func viewDidLoad() {
    super.viewDidLoad()
    var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()

    if let soundIsNotNill  = defaults.objectForKey("rowSelectedKey") as? Int{
        self.rowSelected   = defaults.objectForKey("rowSelectedKey") as! Int}

    if let soundIsNotNill  = defaults.objectForKey("rowSectionKey") as? Int{
        self.rowSection    = defaults.objectForKey("rowSectionKey") as! Int}

}

override func viewWillAppear(animated: Bool) {
    println(" VDL rowSelected \(rowSelected)")
    println(" VDL rowSection \(rowSection)")

}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 13
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let tappedItem  = indexPath.row
        rowSelected = tappedItem
    let section     = indexPath.section
        rowSection  = section

    for row in 0..<13 {
        if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: row, inSection: section)) {
               cell.accessoryType = row == tappedItem ? .Checkmark : .None
        }
    }



    println("didSelectRow rowSelected \(rowSelected)")
    println("didSelectRow rowSection \(rowSection)")

    var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
        defaults.setObject(section, forKey: "rowSectionKey")
        defaults.setObject(tappedItem, forKey: "rowSelectedKey")
        defaults.synchronize()

    saveSound()
}

1 个答案:

答案 0 :(得分:0)

保留表的选择状态的一种方法是为其提供恢复标识符字符串。您可以通过设置表格视图的restorationIdentifier属性,或在界面构建器中的表格身份检查器中进行设置来实现此目的。