2015-09-04 3 views
0

У меня есть статический вид таблицы соты без segue. Это то же самое, что настройки iPhone -> Звуки-> Текстовые тона. Там нет проблем с реализацией галочки и воспроизведением этого системного звука с другого ViewController. При возврате к настройке ViewController звука нет галочки. Я сохраняю indexPath.row и indexPath.section в настройках по умолчанию. Я извлекаю это и сохраняю их в переменных. Как использовать эти переменные, которые теперь имеют indexPath «один для строки и один для раздела», чтобы указать ранее выбранную строку. Я пробовал решение в Интернете, видео и StackoverFlow, и я просто не могу этого понять.Checkmark исчезает при возврате в tableview

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() 
} 
+0

Я вижу, как работает restoreIdentifier, но не уверен, как его реализовать в приведенном выше ViewController. Я новичок в этом. У меня есть способ использовать идентификатор ячейки таблицы, чтобы сообщить tableview «willDisplayCell» или соответствующий «tableView (tableView: UITableView») использовать строку и раздел, которые сохраняются в переменных, чтобы добавить галочку назад? – Dan

ответ

0

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

Смежные вопросы