Как обновить пользовательские представления заголовка в UITableView при удалении разделов? - PullRequest
0 голосов
/ 14 октября 2010

У меня есть многосекционный UITableView с настраиваемыми представлениями заголовков, которым нужно знать их индекс раздела. В настоящее время я записываю номер раздела в поле тега UIView при создании пользовательского представления в viewForHeaderInSection. Однако при удалении строки UITableView не перезагружает представления заголовка раздела для представлений заголовка, видимых на экране, поэтому их поля тегов становятся не синхронизированными. Вызов reloadData для таблицы повторно синхронизирует поля тегов путем воссоздания представлений заголовка, но вызов reloadData мешает анимации удаления строк. Установка таймера для вызова reloadData после «короткого» периода времени кажется хакерской и несколько рискованной, если пользователь заканчивает тем, что взаимодействует с несинхронизированным заголовком до срабатывания таймера (я полагаю, я мог бы добавить переменную состояния, чтобы предотвратить это тьфу)

Я мог бы предположить, что отслеживаю все представления заголовков, созданные в контейнере, и корректирую их теги, когда строки удаляются (тьфу снова). Но тогда как мне избежать утечек в представлениях? Как я узнаю, когда UITableView выпустил представление, чтобы я мог удалить свою ссылку на них, чтобы они могли быть освобождены?

Кажется, это намного больше работы, чем должно быть .... я что-то упустил? Я заметил, что у других есть очень похожие проблемы и никогда не видел окончательного подхода к их решению.

Ответы [ 2 ]

0 голосов
/ 16 октября 2010

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

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

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

Установка таймера для вызова reloadData через «короткий» промежуток времени кажется хакерской и несколько рискованной, если пользователь заканчивает тем, что взаимодействует с несинхронизированным заголовком до срабатывания таймера (полагаю, я мог бы добавить переменную состояния чтобы предотвратить это, тьфу).

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

0 голосов
/ 16 октября 2010

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

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