TableView Повторное использование ячеек и нежелательные флажки - это убивает меня


Apple iOS TableView и повторное использование ячеек убивают меня. Я искал, искал и изучал, но не могу найти хороших документов или хороших ответов. Проблема заключается в том, что когда TableView повторно использует ячейки, такие вещи, как галочки (принадлежность ячейки), установленные для выбранной ячейки, повторяются в ячейках ниже в табличном представлении. Я понимаю, что повторное использование ячеек задуманно из-за ограничений памяти, но если у вас есть список, скажем, из 50 элементов, и он начинает устанавливать дополнительные галочки там, где они не нужны, это делает все усилия бесполезными.

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

У Apple даже есть пример проекта под названием TouchCell, который вы можете загрузить из центра разработки, который должен показать другой способ установки галочки с помощью настраиваемой ячейки с элементом управления изображением слева. В проекте для источника данных используется объект словаря, а не массив с возможностью отключения звука, поэтому для каждого элемента существует строковое значение и проверяемое значение типа bool. Предполагается, что это значение типа bool проверено для установки галочки, чтобы можно было отслеживать выбранные элементы. Этот пример проекта также отображает это глупое поведение, как только вы заполняете TableView более чем 15 ячейками. Повторное использование ячеек начинает ставить ненужные галочки.

Я даже пробовал поэкспериментировать с использованием по-настоящему уникального идентификатора ячейки для каждой ячейки. Поэтому вместо того, чтобы каждая ячейка имела что-то вроде @ "Acell", я использовал статический int, преобразованный в строку, чтобы ячейки получили @ "cell1", @ "cell2" и т. Д. Однако во время тестирования я мог видеть, что сотни новых ячеек, где генерируется при прокрутке, даже если в таблице было всего 30 элементов.

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

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

Кто-нибудь придумал элегантное решение этого раздражающего поведения?

11
задан Adrian 28 May 2015 в 12:19
поделиться