2014-01-04 2 views
2

У меня есть приложение с UICollectionView с горизонтальной прокруткой ячеек (отображается только одна ячейка за раз). Каждая ячейка содержит UITableView, которая отображает контент (URL-ссылки) в каждом из UITableViewCell.
Проблема в том, что первые две ячейки UICollectionView отображают правильное содержимое, но начиная с третьей ячейки содержимое отображается из выделенных ячеек. Правильный контент на UITableView dequeued cell отображается только в том случае, если пользователь прокручивается вниз и затем прокручивает вверх.
Например, содержимое третьей ячейки является содержимым первой ячейки. Ячейка является обычным UICollectionViewCell, в котором есть UITableView. Пользовательская ячейка реализует UITableViewDataSource, UITableViewDelegate.
Я искал различные форумы и сайты и нашел решение обновления. Я попытался добавить [collectionView reload] в метод -cellForItemAtIndexPath:, но он переходит в постоянный цикл. Я знаю, что это неправильное место, но у меня нет других методов, которые вызывают обновление (только прокрутка через ячейки загружает содержимое следующей ячейки).
Может кто-нибудь, пожалуйста, помогите мне решить проблему?Dequeued UICollectionViewCell не обновляется

ответ

4

Вам не хватает информации о dequeuing.
Когда вы выбрали 3d custom UICollectionViewCell, он не выделяется, как когда он отображается в первый раз. Вместо этого ваш просмотр коллекции «повторяет» первую ячейку для отображения 3d. Лучший момент для очистки контента в вашем пользовательском классе ячейки - -(void)prepareForReuse. Если вы переопределите его и очистите его содержимое, -cellForItemAtIndexPath: удалит ячейку «clear», которую вы можете дополнительно настроить.
Однако я точно не знаю, как «очистить» таблицуView, не уверен, возможно ли это. У вас должно быть reloadData на вашем столеView в -cellForItemAtIndexPath:. Пример:

- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath 
{ 
    MyCVCell *cell = [collectionView dequeueReusableCellWithIdentifier:@"MyCVCell" forIndexPath:indexPath]; 
    cell.arrayOfURLsForDisplay = self.arrayOfArraysOfURLs[indexPath.row]; 
    [cell.tableView reloadData]; 
    return cell; 
} 

Здесь я имею в виду у вас есть некоторые arrayOfArraysOfURLs в вашем ViewController, и вы Dislay URL-адреса в пользовательской ячейке с некоторой arrayOfURLsForDisplay

+0

Благодаря куче для help.I пришлось вызвать метод clearsContextBeforeDrawing ([cell.tableView clearsContextBeforeDrawing];) в - (пустоте) prepareF orReuse в UITableView, а затем вызвать метод reload ([cell.tableView reloadData]) в cellForItemAtIndexPath.It работает безупречно после изменения кода, как указано выше. Ваш ответ был большой помощью (я должен был опубликовать его, прежде чем потратил много времени на себя). Кроме того, я вызываю [cell.tableView clearsContextBeforeDrawing] и перезагружаюсь в cellForItemAtIndexPath, он работает одинаково без необходимости подготовки forReuse, просто FYI. – TheCoder

+0

Не проблема. Однако общая практика использования таких элементов управления ('UICollectionView' и' UITableView') требует от вас переопределения '-prepareForReuse' для приведения ячейки в состояние« по умолчанию ». В конкретных случаях (например, ваш) не может быть необходимости в этом. –

0

у меня была аналогичная проблема, вместо того, чтобы использовать [cell.tableView reloadData] внутри cellForItemAtIndexPath, я назвал collectionView.reloadData в prepareForUse методе, который перезаписывается в пользовательском UITableviewCell

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