2016-02-20 4 views
0

Теперь я могу щелкнуть несколько строк и изменить цвет меток и перейти к следующему контроллеру представления, но когда я вернусь к представлению таблицы, я распечатаю 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!) 
} 
+0

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

+0

, когда вы возвращаетесь назад ** cellForRowAtIndexPath ** вызывается так, чтобы ваш код был в этом методе – viratpuar

+0

В 'cellForRowAtIndexPath' вы выбираете строку, которая вызывает' didSelectRowAtIndexPath', которая вызывает 'cellForRowAtIndexPath', который .... ??? Это довольно дорого и неэффективно. – vadian

ответ

0

вы обновляете метки в didSelectRowAtIndexPath FUNC, но это называется только тогда, когда вы сделаете выбор.

, когда вы вернетесь к мнению, клетки обновляются через cellForRowAtIndexPath - так изменить цвет там

0

Расширьте модель - массив животных - быть классом со свойствами name и selected. В cellForRowAtIndexPath установите цвет в зависимости от свойства selected и удалите selectRow..... После выбора строки выберите элемент модели для этой строки, установите selected на true и перезагрузите представление таблицы. Это практический MVC.

class Animal { 

    let name : String 
    var selected = false 

    init(name : String) { 
    self.name = name 
    } 
} 



class ViewController : UITableViewController { 

    var animals = [Animal]() 

    override func viewDidLoad() { 
    animals = [Animal(name: "dog"), Animal(name: "cat"), Animal(name: "bat")] 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return animals.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell: selectcell = table.dequeueReusableCellWithIdentifier("Cell") as! selectcell 
    cell.selectionStyle = UITableViewCellSelectionStyle.None 

    let animal = animals[indexPath.row] 
    cell.subjecters.text = animal.name 
    cell.subject.textColor = animal.selected ? UIColorFromRGB("ffffff") : UIColorFromRGB("f07763") 
    return cell 
    } 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let animal = animals[indexPath.row] 
    animal.selected = true 
    tableView.reloadData() 
    } 

} 
+0

Когда я нажимаю на ячейку, ничего не происходит. – stackerleet

+0

Я проверил код успешно. – vadian

+0

Могу ли я вернуть animal.count в функцию numberofrows? – stackerleet

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