2013-07-03 1 views
4

Я пришел сюда, потому что у меня довольно странная проблема с моим UICollectionView.UICollectionView reloadData ghost cells

Imgur альбом с всех экранов Я хотел бы поделиться: http://imgur.com/a/v3sox

Прежде всего, вот что мое приложение выглядит без проблем: Изображение 2 альбома.

Обратите внимание на кнопку обновления в правом верхнем углу, это проблема, которая дает мне проблемы.

Когда я прокручиваю UICollectionView очень быстро и нажимаю «обновить», пока просмотр коллекции все еще прокручивается, у меня есть «остатки ячеек», которые не принадлежат никому и просто остаются на экране. (например: Изображение 1 из альбома)

Я не понимаю, что это потому, что происходит в моем методе обновления у меня есть:

- (void)refreshData 
{ 
    //A bunch of code before I reset the data 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     //Reset data 
     currentProjects = nil; 
     [self.projectsCollectionView reloadData]; 

     //Some other stuff concerning the little "Chargement..." view 
    }; 
} 

Клетки затем продолжить, чтобы остаться на моем экране на каждой папке, так если я выберу другую папку, я получу изображение 3 альбома (обратите внимание на метки для последних 4 ячеек, они смешаны, потому что предыдущие ячейки все еще находятся на экране, когда их не должно быть.)

У кого-нибудь есть идея о том, что может это сделать? Большое спасибо за ваше время

P.S: жаль, что я поставил все экраны в альбоме, не могли бы разместить более 2 ссылки, так что я должен был импровизировать

+0

Если вы решили свою проблему, отправьте это как ответ ниже и отметьте это как принято. –

ответ

0

У меня была эта подобная проблема раз. Проблема в том, что моя пользовательская ячейка снова и снова создает subview.

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

2

У этой проблемы тоже была такая же проблема. Я решил это, изменив UICollectionViewCell.

(примечание: мой код C# используя MonoTouch).

прежде чем ячейка создавала объекты каждый раз. то есть.

textView = new UITextField() 
{ 
    BackgroundColor = UIColor.Clear, 
    TextColor = UIColor.LightGray, 
    Text = Title 
}; 

, чтобы исправить ситуацию, проверить объект и соответствующим образом обновить его.

if (textView == null) 
{ 
    textView = new UITextField() 
    { 
     BackgroundColor = UIColor.Clear, 
     TextColor = UIColor.LightGray, 
     Text = Title 
    }; 
} 
else 
    textView.Text = Title; 

теперь, когда в CollectionView вызывается информация о перезагрузке, она перезагружается правильно.