2017-01-04 2 views
0

У меня есть TableView, и таблица заполняется из массива. Ячейка имеет тип TableViewCell.xib. Я хочу изменить цвет метки в ячейке.Установка цвета TableViewCell для выбора строки Swift 3

Вот мой TableViewController


struct cell_data { 
    let label1: String! 
} 

class TableViewController: UITableViewController { 

    let cellDataArray = [cell_data]([cell_data(label1: "This text is for label 1")]) 

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = Bundle.main.loadNibNamed("TableViewCell", owner: self, options: nil)?.first as! TableViewCell 

     cell.label_1.text = cellDataArray[indexPath.row].label1 
     cell.selectionStyle = .none 

     let whiteRoundedView : UIView = UIView(frame: CGRect(x:10, y:5, width: self.view.frame.size.width - 20, height: cell.frame.size.height - 7)) 
     whiteRoundedView.layer.backgroundColor = UIColor.green.cgColor 
     whiteRoundedView.layer.masksToBounds = false 
     whiteRoundedView.layer.shadowOffset = CGSize(width: -1, height: 1) 
     whiteRoundedView.layer.shadowOpacity = 0.3 

     cell.contentView.addSubview(whiteRoundedView) 
     cell.contentView.sendSubview(toBack: whiteRoundedView) 

     return cell 
    } 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     let cell = tableView.cellForRow(at: indexPath) 


    } 

    override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
     let cell = tableView.cellForRow(at: indexPath) 


    } 
} 

То, что я хочу сделать быть в состоянии сделать, это изменить цвет метки ячейки при выборе строки , не затрагивая UIView внутри клетки. То есть, когда я изменяю высоту UIView, когда я выбираю строку, я попытался перезагрузить, но перезагрузка ячейки установила высоту UIView в исходную настройку.

И как только я установил цвет ярлыка, я хочу вернуть его к исходному цвету, когда я снижу выделение строки.

Надеюсь, я прояснил ситуацию. Заранее спасибо.

+0

Не можете изменить ярлык на цвет хотите в tableView: didSelectRowAt: и сбросить его в tableView: didDeselectRowAt:? – ubiAle

+0

@ubiAle No. Когда я меняю ярлык в файле didSelectRowAt, мне нужно будет перезагрузить строку, что означает, что она также перезагрузит UIView, и я потеряю все изменения, внесенные в нее, когда я выберу. – samuria

+0

Почему вам нужно перезагрузить строку? – ubiAle

ответ

1

Вам не нужно перезаряжать ячейку, чтобы обновить цвет ярлыка. Вы можете попробовать переопределить метод в вашем TableViewCell со следующим кодом:

override func setSelected(selected: Bool, animated: Bool) { 
super.setSelected(selected, animated: animated) 
if (selected) { 
    //Change your label color for selected state 
} else { 
    //Change your label color for unselected state 
} 
} 
+0

OP также хочет увеличить высоту изображения внутри ячейки. Для этого он ** должен будет перезагрузить камеру! – Rikh

+0

Это что-то вроде расширяемой ячейки? Если это тот случай, он может перезагрузить ячейку, чтобы увеличить высоту внутреннего вида и самой высоты ячейки. Сохраняя selectedIndexPath и попытайтесь выбрать эту ячейку программно после перезагрузки ячейки. –

+0

@Rikh Забыл отметить, что высота обновляется моим текущим кодом без перезагрузки из-за 'tableView.updateBegin' – samuria

0

попробовать это:

func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) 

    { 
     let cell = tableView.cellForRowAtIndexPath(indexPath)! as! customTableViewCell // name of your custom cell class 
     cell.label_1.backgroundColor = UIColor.whiteColor()//give your selection color 

    } 
0

Попробуйте

override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
    let cell = tableView.cellForRow(at: indexPath) as yourCell 
    cell.yourlable.textcolor = yourColor; 

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