2016-05-16 3 views
0

У меня есть этот кусок кода:Таблица вид клеток аксессуар не меняется, когда из поля зрения

tableView.deselectRowAtIndexPath(indexPath, animated: true) 
if let selected = self.lastSelected { 
    tableView.cellForRowAtIndexPath(selected)?.accessoryType = .None 
} 
tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = UITableViewCellAccessoryType.Checkmark 
self.lastSelected = indexPath 

Я позволяет мне поставить галочку на ячейку, я выбираю и удаляет предыдущую отметку. Проблема, с которой я сталкиваюсь, заключается в том, что если список большой и ячейка вне поля зрения, галочка не удаляется при выборе новой ячейки.

Я попытался добавить tableview.reloaddata(), но ничего не сделал.

Мысли?

ответ

0

cellForRowAtIndexPath возвращает nil для невидимых клеток.

Чтобы получить радиокнопку как эффект, вы должны сделать что-то вроде этого:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = UITableViewCell() 
    configureCell(cell, atIndexPath: indexPath) 
    return cell 
} 

func configureCell(cell: UITableViewCell, atIndexPath indexPath: NSIndexPath) { 
    if indexPath == selectedIndexPath { 
     cell.accessoryType = .Checkmark 
    } else { 
     cell.accessoryType = .None 
    } 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    selectedIndexPath = indexPath 

    // Note indexPathsForVisibleRows may be nil depending on your app's content. 
    // zip just joins two arrays together, into a single array of tuples. 
    zip(tableView.indexPathsForVisibleRows!, tableView.visibleCells).forEach({ indexPath, cell in 
     configureCell(cell, atIndexPath: indexPath) 
    }) 
} 
Смежные вопросы