it-roy-ru.com

Swift. Изменить цвет пользовательской метки ячейки табличного представления при выборе

У меня есть ячейка Custom Tableview в Swift и в этой ячейке метка.

Я хочу иметь возможность изменить метку при выборе ячейки.

Как я могу сослаться на мой пользовательский ярлык UITableviewCell в didSelectRowAtIndexPath

В Objective C для ссылки на мою собственную ячейку в didSelectRowAtIndexPath я бы использовал следующее:

MPSurveyTableViewCell *cell = (MPSurveyTableViewCell *)[tableViewcellForRowAtIndexPath:indexPath];
cell.customLabel.TextColor = [UIColor redColor]; 

Что я должен сделать в Swift, чтобы достичь того же результата?

9
user3110353

Вам просто нужно перевести тот же код в Swift. 

var myCell = tableView.cellForRowAtIndexPath(indexPath) as! MPSurveyTableViewCell
myCell.customLabel.textColor = UIColor.redColor()
11
S Shahid

Вышеуказанные ответы неполны

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

func tableView(tableView: UICollectionView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifierHere", forIndexPath: indexPath) as! MPSurveyTableViewCell 

    // setup your cell normally

    // then adjust the color for cells since they will be reused
    if cell.selected {
        cell.customLabel.textColor = UIColor.redColor()
    } else {
        // change color back to whatever it was
        cell.customLabel.textColor = UIColor.blackColor()
    }

    return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! MPSurveyTableViewCell
    cell.customLabel.textColor = UIColor.redColor()
    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)

}

func tableView(tableView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! MPSurveyTableViewCell

    // change color back to whatever it was
    cell.customLabel.textColor = UIColor.blackColor()
    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)

}
5
Water Not Words

Swift 3 xcode 8

func  tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    let Cell = tableView.cellForRow(at: indexPath)
    Cell?.textLabel?.textColor = UIColor.red // for text color
    Cell?.backgroundColor = UIColor.red // for cell background color
}
3
Safad Funy

Попробуй это,

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    var Cell = tableView.cellForRowAtIndexPath(indexPath) as! MPSurveyTableViewCell
  Cell. customLabel.textColor = UIColor. redColor()
}
2
DHEERAJ

почему бы не использовать setSelected в подклассе UITableViewCell?

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
  customLabel.textColor = selected ? UIColor.red : UIColor.black
}

или если вы хотите, чтобы через определенный промежуток времени он вернулся к невыбранному цвету: 

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
  if selected {
  customLabel.textColor = UIColor.red
  DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2, execute: { [weak self] in
    self?.customLabel.textColor = UIColor.black
    }
  }
}

Затем просто установите ячейку selectionStyle = .none

2
JustinM
let CellObject = tableView.dequeueReusableCell(withIdentifier: "your cell identifier name") as! MPSurveyTableViewCell
CellObject.customLabel.textColor = UIColor.red
0
Prasann