2015-11-03 2 views
1

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

RZRestaurantListingCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

У меня есть поисковая лот об этом, но я не получаю ответа на желание, поэтому, пожалуйста, помогите мне в этом случае.

У меня такая же проблема, как у большинства разработчиков iPhone после повторного использования ячейки. У меня есть UIProgressView внутри моей ячейки, и одна кнопка там для загрузки видео, и я показываю прогресс там в процессе просмотра, сколько осталось. Итак, теперь у меня проблема, когда у меня есть больше данных и выход из экрана в это время я нажимаю кнопку загрузки в первой строке UITableviewCell, тогда я прокручиваю вниз, так что прогресс также отображается в нижней случайной ячейке поэтому пользовательский интерфейс изменяется в двух ячейках, а не в одном.

+0

Вы не показываете, как вы обновляете индикаторы выполнения, что, вероятно, является вашей проблемой. Вам нужно использовать cellForRowAtIndexPath, чтобы найти, какой индикатор выполнения обновляется. Не храните ссылки на ячейку или индикатор выполнения в любом месте. – fishinear

ответ

1

Вам необходимо реализовать метод -prepareForReuse в своем пользовательском классе ячеек и установить для всех свойств ячейки значение по умолчанию.

- (void)prepareForReuse 

Если объект UITableViewCell можно использовать повторно, то есть, он имеет повторное использование идентификатора -этот метод вызывается непосредственно перед тем, объект возвращается от метода dequeueReusableCellWithIdentifier UITableView :. Для причин производительности вы должны только сбросить атрибуты ячейки, которые не связаны с контентом, например альфа, редактирование и выбор . Делегат табличного представления в tableView: cellForRowAtIndexPath: должен всегда перезагружать все содержимое при повторном использовании ячейки. Если объект cell не имеет связанного идентификатора повторного использования, этот метод не вызывается . Если вы переопределите этот метод, вы должны обязательно вызвать реализацию суперкласса.

См здесь больше, https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewCell_Class/#//apple_ref/occ/instm/UITableViewCell/prepareForReuse

+0

Привет, я применил этот метод, но теперь работаю и перезагружаю свою камеру. – jogshardik

+0

@jogshardik Работает или не работает? – Vijay

+0

Значит, я уже использовал этот метод, но не работал ... после этого я поставил вопрос здесь ... позвольте мне попробовать еще раз – jogshardik

0

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

-(void)prepareForReuse 
{ 
    [super prepareForReuse]; 

    self.textLabel.text = @""; 
    self.detailTextLabel.text = @""; 
    self.imageView.image = nil; 
} 
+0

Позвольте мне попробовать еще раз – jogshardik

0

Вам необходимо присвоить значение прогресса внутри - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    RZRestaurantListingCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    // If the cell is reused, the `-prepareForReuse:` of `UITableViewCell` will be called. 

    //!! Assign current progress value to this cell, otherwise, the progressBar.value may look like a random value. 
    //!! Because the current cell is reused from a disappeared cell. 
    cell.progressBar.value = ... ; 

    return cell; 
} 

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

+0

Я думаю, что вы правы, мне нужно установить значение прогресса в cellForRow – jogshardik

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