Как предотвратить reloadRowsAtIndexPaths для блокировки ввода пользователя? - PullRequest
4 голосов
/ 28 июля 2011

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

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

Это означает, что пользователь начинает прокручивать список, и элементы начинают загружаться.Иногда анимация перезагрузки происходит в то же время, когда пользователь просто снова касается экрана, и это касание не распознается.Затем прокрутка не продолжается и останавливается.Это не происходит все время, и я полагаю, что это нечастый случай для пользователя (ожидается, что пользователь прочитает каждую строку результатов перед прокруткой вниз), но это меня бесит.

Явыполнение большинства моих анимаций с блоками и флагом UIViewAnimationOptionAllowUserInteraction действительно полезно, так есть ли версия блока reloadRowsAtIndexPaths, где анимация перезагрузки не будет блокировать взаимодействие пользователя с прокруткой?

1 Ответ

2 голосов
/ 31 июля 2011

Я думаю, что решение, которое вы ищете, состоит в том, чтобы загрузить данные в фоновом режиме (как вы описываете) и вызывать reloadRowsAtIndexPaths: только после того, как данные получены и готовы к отображению.Вы также должны, вероятно, заново отобразить данные, а не анимированные.

Я не думаю, что вы можете что-то сделать, чтобы обойти пропущенные касания с вашей текущей схемой.Я предлагаю «делать то, что хочет iOS», а не «пытаться уговорить iOS делать то, что вы хотите».Да, возможно, это не тот ответ, который вы хотели услышать, но я думаю, что именно так он и работает.

(Кстати, вы всегда можете использовать bugreporter.apple.com , чтобы сделать запрос на расширение!:)

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