Галочка исчезает при возврате к просмотру таблицы

У меня есть статическое представление таблицы ячеек без перехода. Это то же самое, что и Настройки 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()
}

person Dan    schedule 04.09.2015    source источник
comment
Я вижу, как работает restoreIdentifier, но не уверен, как реализовать его в вышеприведенном ViewController. Я новичок в этом. Есть ли способ использовать идентификатор ячейки табличного представления, чтобы сообщить tableview willDisplayCell или соответствующий tableView (tableView: UITableView, чтобы использовать строку и раздел, сохраненные в переменных, чтобы добавить галочку обратно?   -  person Dan    schedule 13.09.2015


Ответы (1)


Один из способов сохранить состояние выбора таблицы — указать строку идентификатора восстановления. Вы можете сделать это, установив свойство restorationIdentifier табличного представления или установив его в инспекторе удостоверений таблицы в Interface Builder.

person NRitH    schedule 04.09.2015