Почему UITableViewCell остается выделенным? - PullRequest
138 голосов
/ 03 декабря 2009

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

Ответы [ 17 ]

1 голос
/ 01 декабря 2016

Я использую CoreData, поэтому код, который работал для меня, представлял собой комбинацию идей из различных ответов в Swift:

override func viewDidAppear(_ animated: Bool) {
    if let testSelected = yourTable.indexPathForSelectedRow {
        yourTable.deselectRow(at: testSelected, animated: true)
    }
    super.viewDidAppear(true)
}
1 голос
/ 23 апреля 2016

Если ни один из них не работает для вас, рассмотрите этот обходной путь:

Используйте раскрутку, чтобы позвонить:

@IBAction func unwind_ToTableVC (segue: UIStoryboardSegue) {
    if let index = tableView.indexPathForSelectedRow {
        tableView.deselectRowAtIndexPath(index, animated: true)
    }
}

Зачем это? Прежде всего, если у вас возникли проблемы с запуском кода отмены выбора в нужное время. У меня были проблемы с тем, что он не работал с viewWillAppear, поэтому раскрутка работала намного лучше.

Шаги:

  1. Запишите последовательность раскрутки (или вставьте сверху) в свой 1-й ВК (тот, что со столом)
  2. Перейти ко 2-му ВК. Удерживая нажатой клавишу «Control», нажмите кнопку «Отмена» / «Готово» и т. Д., Которую вы используете, чтобы закрыть VC, и перетащите на значок «Выход» вверху.
  3. Выберите последовательность раскрутки, созданную на шаге 1

    Удачи.

0 голосов
/ 16 марта 2019

Xcode 10, Swift 4

У меня была такая же проблема, и я обнаружил, что оставил пустой вызов viewWillAppear в нижней части моего tableViewController. После того как я удалил пустую функцию переопределения, строка больше не оставалась подсвеченной после возврата к представлению tableView.

проблемный функционал

override func viewWillAppear(_ animated: Bool) {
  // need to remove this function if not being used.
}

удаление пустой функции решило мою проблему.

0 голосов
/ 04 февраля 2019

если ячейка остается выделенной после прикосновения к ней, вы можете вызвать метод UITabelView,

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

`[tableView deselectRowAtIndexPath:indexPath animated:YES];`   

}

Или вы можете использовать следующий метод и изменить его в соответствии с вашими требованиями,

// MARK: UITableViewDelegate

func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) {
  if let cell = tableView.cellForRowAtIndexPath(indexPath) {
     cell.backgroundColor = UIColor.greenColor()
  }
}

func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) {
  if let cell = tableView.cellForRowAtIndexPath(indexPath) {
     cell.backgroundColor = UIColor.blackColor()
  }
} 
0 голосов
/ 06 декабря 2016

для Swift 3: Я бы предпочел использовать в viewDidDisappear

Определить: -

    var selectedIndexPath = IndexPath()

В представлении DidDisappear: -

    override func viewDidDisappear(_ animated: Bool) {
    yourTableView.deselectRow(at: selectedIndexPath, animated: true)
}

В didSelectRowAtIndexPath: -

    func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath) {
    selectedIndexPath = indexPath
}
0 голосов
/ 14 апреля 2015

Используйте этот метод в классе UITableViewCell

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

   // Just comment This line of code
   // [super setSelected:selected animated:animated];        
}
0 голосов
/ 06 февраля 2014

У меня была такая же проблема в течение долгого времени, поэтому, если кто-то еще борется:

Посмотрите на -tableView: cellForRowAtIndexPath: и посмотрите, создаете ли вы ячейки или используете «идентификатор повторного использования». Если последнее, убедитесь, что в вашей таблице в IB есть ячейка с этим идентификатором. Если вы не используете идентификатор повторного использования, просто создайте новую ячейку для каждой строки.

Это должно дать вашей таблице ожидаемое «исчезновение выбранной строки» при появлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...