2015-02-23 3 views
0

У меня странная проблема с моим табличным представлением. У меня есть список аудиодорожек и звуковой проигрыватель для воспроизведения выбранного трека в определенном ряду. Все работает отлично!Проблема с Swift TableViewCell: изменить цвет фона для выбранной строки

Я хотел изменить цвет фона для выбранной строки в таблице, чтобы, как только пользователь воспроизвел звук и вернулся к списку треков (мой контроллер табличного представления), он может видеть, какие из ранее выбранных строк.

Но когда я запускаю, меняет цвет не только для строки по пути указателя, которую я выбрал, но и для элемента по пути указателя + 10. Если я выберу первую строку, это изменит цвет для строки в индекс: 0, 10, 20, 30 ...

для того, чтобы изменить цвет выбранной ячейки, я сделал следующие файлы:

// MARK: - Navigation 
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.performSegueWithIdentifier("audioPlayer", sender: tableView) 

    var selectedCell:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath) as CustomTableViewCell 
    selectedCell.contentView.backgroundColor = UIColor.greenColor() 
    selectedCell.backgroundColor = UIColor.blueColor() 

Пожалуйста найти скриншот моего вопроса, я выбрал всего три ряда: 1, 3, 5, но я выбираю 1,3,5,11,13,15,21,23 и т. д.: https://www.dropbox.com/s/bhymu6q05l7tex7/problemaCelleColore.PNG?dl=0

Для получения более подробной информации - если может помочь - вот это мой заказ Просмотр таблицы Класс:

import UIKit 

    class CustomTableViewCell: UITableViewCell { 

@IBOutlet weak var artista: UILabel! 

@IBOutlet weak var brano: UILabel! 

var ascoltato = false 

@IBOutlet weak var labelRiproduciAscoltato: UILabel! 

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 
} 

func setCell(artista: String, brano: String){ 
    self.artista.text = artista 
    self.brano.text = brano 
} 

    } // END MY CUSTOM TABLE VIEW CELL 

Вот это метод cellForRowAtIndexPath в моем TableViewController:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath) as CustomTableViewCell 

    var tracks : Brani //Brani is my custom Object for handle my tracks 

    cell.setCell(tracks.title!, brano: tracks.author!) 


    return cell 

} 

Я бегу на IPad Air с iOS 7.1.

Благодарим вас за любые предложения или рекомендации, связанные с моей проблемой.

ответ

0

Возможно, это связано с тем, что UITableViewCells перерабатываются. Это означает, что ранее выбранный tableViewCell повторно используется ячейками нижних индексов. Это ожидаемое поведение UITableView и имеет смысл, поскольку это экономит использование памяти. Чтобы исправить эту проблему, вам необходимо, чтобы ваш источник данных отслеживал, какая ячейка выбрана, и соответствующим образом обновил цвет фона ячейки.

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
self.performSegueWithIdentifier("audioPlayer", sender: tableView) 
//datasource is updated with selected state 
//cell is updated with color change 
} 

Затем в методе cellForRowAtIndexPath:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath) as CustomTableViewCell 

    var tracks : Brani //Brani is my custom Object for handle my tracks 

    cell.setCell(tracks.title!, brano: tracks.author!) 
    //update cell style here as well (by checking the datasource for selected or not). 

    return cell 
} 
+0

Спасибо Далтон за ответ и простите за мой глупый вопрос но:. В моем случае мой источник данных был бы мой CustomTableViewCell тогда? – Fustav

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