Теперь я могу щелкнуть несколько строк и изменить цвет меток и перейти к следующему контроллеру представления, но когда я вернусь к представлению таблицы, я распечатаю selectrowatindexpath в представлении, и я получу правильные значения, но ярлыки не окрашены. Выбранный означает, что метка белая, но этикетка даже не отображает выбранные значения. Как это исправить?Как изменить цвет метки вне функции didSelectRowAtIndexPath?
var selected = ["dog", "cat", "bat"]
var animal = [String]() //selected data
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: selectcell = table.dequeueReusableCellWithIdentifier("Cell") as! selectcell
cell.subjecters.text = selected[indexPath.row]
cell.selectionStyle = UITableViewCellSelectionStyle.None
if(animal != []){
for(var i = 0; i < selected.count; i++){
for(var x = 0; x < animal.count; x++){
if(selected[i] == animal[x]){
var rowtoselect = NSIndexPath(forRow: i, inSection: 0)
self.table.selectRowAtIndexPath(rowtoselect, animated: true, scrollPosition: .None)
cell.subject.textColor = UIColorFromRGB("f07763")
}
}
}
}
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let currentCell = table.cellForRowAtIndexPath(indexPath) as! selectcell
currentCell.subject.textColor = UIColorFromRGB("ffffff")
currentCell.selectionStyle = UITableViewCellSelectionStyle.None
self.selected.append(currentCell.subjecter.text!)
}
Вместо обновления вида (ячейки таблицы) обновите модель (массив источников данных), а затем перезагрузите представление. – vadian
, когда вы возвращаетесь назад ** cellForRowAtIndexPath ** вызывается так, чтобы ваш код был в этом методе – viratpuar
В 'cellForRowAtIndexPath' вы выбираете строку, которая вызывает' didSelectRowAtIndexPath', которая вызывает 'cellForRowAtIndexPath', который .... ??? Это довольно дорого и неэффективно. – vadian