1

У меня есть UITableView с скрытыми субтитрами, но настроен там, где, когда кто-то выбирает ячейку, он показывает субтитры этой ячейки. Это отлично работает, за исключением того, что после нажатия любой ячейки, чтобы открыть ее субтитры, если вы прокрутите вниз, вы обнаружите, что каждые 12 ячеек имеют скрытый подзаголовок (а также тот, который он должен был открыть). Вот код, я использую в didSelectRowAtIndexPath:Swift UITableView didSelectRowAtIndexPath ошибка

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

    for cell in tableView.visibleCells() { 
     cell.detailTextLabel??.hidden = true 
    } 

    var cell = tableView.cellForRowAtIndexPath(indexPath) 
    cell?.detailTextLabel?.hidden = false 


} 

Я уверен, что это связано с «.visibleCells()», так как каждые 12 ячеек составляет около высоты моего видимого стола на моем iPhone 6 Plus. Когда я запускаю его на 4s в симуляторе, это примерно каждые 8 ​​ячеек. Но я не уверен, как это сделать, кроме «visibleCells»? Но это странно, потому что это вся таблица - весь путь вниз, каждые 12 клеток показывают свой подзаголовок ...

спасибо за любую помощь

ответ

2

UITableView его клетку многократно использующей. Таким образом, ячейка для строки, на которую вы нажали (скрытый субтитр), может использоваться для строки другой строки. Решение состоит в том, чтобы определить метод prepareForReuse() в подклассе UITableViewCell (или создать подкласс, если у вас его нет) и скрыть там субтитры.

+0

Спасибо - я не был уверен, как определить prepareForReuse(), но у меня была «переопределение Func Tableview (Tableview: UITableView, cellForRowAtIndexPath» с «пусть клеток = tableView.dequeueReusableCellWithIdentifier», поэтому я добавил «клетку. detailTextLabel? .hidden = true ", и это, кажется, устранило проблему. Является ли это хорошим решением? Я имею в виду, я знаю, что он работает, но я не знаю, плохо ли это это сделать, по сравнению с «prepareForReuse()» - возможно, это все равно одинаковые результаты? Еще раз спасибо –

+0

Это тоже будет работать. Производительность разумна, это не имеет никакого значения. В 'cellForRowAtIndexPath' вы возвращаете сконфигурированную ячейку. Я предпочитаю иметь ячейку подкласс обрабатывает его свойства и делает как можно меньше в 'cellForRowAtIndexPath'. Но это вопрос вкуса. – diederikh

1

Добавьте этот метод dataSource к контроллеру. Должен работать нормально.

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) { 
    var identifier = "cellIdentifier" 
    var cell = tableView. dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath) 
    cell.detailTextLabel?.hidden = true 

    return cell 
} 
+0

Большое спасибо –

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