2009-08-27 2 views
2

Я новичок в разработке iPhone. Я работаю над табличным представлением (подкласс UITableView по умолчанию), который содержит сложные пользовательские ячейки с несколькими подзонами и элементами управления. Прокрутка не очень гладкая, но сейчас я просто оставлю это.Загадочная проблема с UITableView

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

Если таблица содержит очень мало строк, скажем, 5 или 6, она никогда не застревает. Используемый класс ячеек класса I приведен в примере, приведенном здесь: http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/

Может ли кто-нибудь дать нам подсказку или решение? Заранее спасибо.

+1

Это происходит в симуляторе или на устройстве? Симулятор застрял в табличных представлениях довольно часто. Если это устройство, проигнорируйте этот комментарий;) – Jab

+0

Это происходит в симуляторе и на устройстве. В симуляторе таблица просто перестает прокручиваться, а скроллер исчезает. На устройстве скроллер не исчезнет. –

ответ

1
  1. Ячейки таблицы создаются только в случае необходимости, то есть когда они появляются в поле зрения, и они обычно выгружаются и отпускаются, когда они выходят из поля зрения.
  2. Вставьте код NSLog(@"Cell loading"); в код создания вашей ячейки и проверьте консоль, чтобы увидеть, как это происходит при прокрутке.
  3. Вы используете кеширование? Документы демонстрируют, как вы можете кэшировать ячейки таблицы для повышения производительности. Что еще вы делаете, когда создаете table cells? Если есть какие-либо замедления производительности, вы, вероятно, не должны этого делать при создании ячеек.
  4. Что я делаю, так это то, что я создаю весь свой контент до того, как таблица загрузится, и когда ячейки создаются, все содержимое просто помещается в представление.
  5. Любой вид чертежа резко снизит производительность, особенно если вы используете прозрачность.
+0

Спасибо за ваш полезный отзыв, хотя на данный момент я не буду уделять много внимания производительности. Я думаю, что я решил проблему «скроллер», используя шаблон UITableViewController, сгенерированный XCode, вместо пользовательского UIViewController. Протестируйте прокрутку без остановки в течение нескольких минут, и скроллер никогда не застрял. –

0

Я бы посмотрел на ваш метод cellForRowAtIndexPath - на пару возможных проблем.

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

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

+0

Возможно, что-то не так с моим пользовательским UIViewController, который обрабатывает методы делегата таблицы. Во всяком случае, я (думаю) решил проблему, используя шаблон UITableViewController, сгенерированный XCode. Благодарю. –

1

Для потомков, и только справедливо, если вы используете Unity-Iphone: эта проблема сводит меня с ума, и я установил его с предложением в этой должности:

http://forum.unity3d.com/threads/113815-quot-Sticky-quot-scrolling-in-UITableView-and-UIScrollView-when-interfacing-Unity-and-Obj-C

Изменение флага препроцессора в

#define USE_DISPLAY_LINK_IF_AVAILABLE 0 

дал проблему счастливый конец.

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