2015-03-29 2 views
1

Я получаю какое-то непреднамеренное поведение переустройства ячеек. У меня есть UICollectionView с пользовательскими ячейками, каждый из которых содержит UITableView, который может отображать один из двух типов пользовательских ячеек (imageCell или movieCell).iOS Swift: Подготовьте collectionView для повторного использования

Когда ячейки коллекцииView переработаны, пользовательские ячейки табличного представления не удаляются должным образом. Вместо этого типы tableViewCell унаследованы от переработанной ячейки.

override func prepareForReuse() { 
    super.prepareForReuse() 

    if tableView != nil { 
     tableView = nil 
    } 
} 

Что мне делать по-другому?

ответ

3

Как сказал @nhgrif в своем удаленном сообщении, ваш код не имеет большого смысла. (Как вы его удалили?)

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

Вместо этого оставьте представление таблицы неповрежденным и просто отправьте ему сообщение reloadData. Затем он должен перезагрузить себя новым содержимым.

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

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

+1

Это имеет смысл. Перезагрузка tableView - именно то, что я хотел. Спасибо! – colindunn