2013-08-19 2 views
1

В настоящее время я работаю над обновлением приложения, которое я сам не сделал.Где UITableViewCell возвращается в очередь?

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

Проблема в том, что иногда они кажутся белыми, и я думаю, что это потому, что они возвращаются dequeueReusableCell, пока они все еще видны. (Таким образом, представление таблицы повторно использует ячейку, которая, поскольку она все еще видна, не должна повторно использоваться.)

Поскольку в этой таблице обычно не так много ячеек, я попытался с обходным путем, что alloc и init - новая ячейка каждый раз вместо того, чтобы убирать старый, и пока он отлично работает (за небольшим столом).

Однако это нехорошее решение, и я хочу сделать это «правильным» способом.

Я не знаю, как это решить, следует ли вернуть ячейку в очередь или нет.

Что делать, чтобы помещать ячейки в очередь для повторного использования?

+0

Разве ваш вид стола повернут на 90 градусов, чтобы горизонтальная прокрутка? –

+0

Да, это так. Я использую этот https://github.com/alekseyn/EasyTableView – johnyu

+1

Вы говорите, что они белые, когда приходят на экран, или они появляются на экране с изображениями, а затем становятся белыми, пока все еще на экране? –

ответ

0

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

Но когда вы используете TableView, это не очень дорого стоит денег, сделайте это так. Это путь не «отключить» повторное использование.

Звучит так, потому что tableView поворачивается на 90 ° для достижения горизонтальной прокрутки. Итак, iOS думает, что ячейка, которая получила прокрутку суммы x пикселей и должна быть расположена вне экрана и может быть использована повторно. Это то, что я предполагаю.

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

Когда моя презумпция верна, другой возможно решения может быть использование двух идентификаторов многоразовых и чередовать их, так что клетка получила достаточно «пространства» для прокрутки:

if([indexPath row] % 2 == 0) { 
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierOne]; 
} 
else { 
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierTwo]; 
} 

Но я ДЕЙСТВИТЕЛЬНО дона теперь, если я прав с этим догадкой :)

+0

Я должен поддерживать iOS 5. :(Я также нашел случай, когда таблица больше, и когда я прокручиваю ее достаточно быстро, все 3 изображения становятся белыми. – johnyu

+0

Действительно? [Эта версия с расширенной диаграммой] [1] из [Apple Ресурсы разработчика] [2] могут помочь вам убедить своих клиентов, чтобы вы могли перейти на iOS 6 :) [1]: https://devimages.apple.com.edgekey.net/devcenter/ios/checklist/images/chart.png [2]: https://developer.apple.com/devcenter/ios/checklist/ –

+0

Но ваш комментарий звучит так, будто изображения не загружаются достаточно быстро. Они загружаются с веб-сервера? –