UItableViewCell Custom ContentView с несколькими метками и необходимостью сохранения выбора - PullRequest
0 голосов
/ 23 июня 2011

У меня есть UITableView с несколькими UILabel с в каждой ячейке, как в виде сетки.Я добавил UIGestureRecognizer, чтобы выполнить некоторые действия с каждым из этих ярлыков (например, изменить его фон).Все работает нормально.

Но проблема в том, что при прокрутке вверх или вниз метки, выбранные в ячейке, теряют свое состояние выбора.При поиске некоторые люди предложили создать ячейки с разными идентификаторами ячеек или использовать вместо них UIScrollView, но оба метода будут использовать больше памяти по сравнению с добавлением нескольких меток в UITableViewCell 'contentView.

* 1010.* Как сохранить состояние выделения UILabel с в каждой ячейке при прокрутке?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2013

Поскольку состояние выбора необходимо для точного рисования каждой ячейки, вы должны добавить свойства для каждого состояния метки в объект модели подложки ячейки. Затем в tableView:cellForRowAtIndexPath: вы можете определить из объекта модели правильное выбранное состояние для каждой метки:

- (void)tableView:(UITableView*) cellForRowAtIndexPath:(NSIndexedPath*)path {
    CustomCell *cell; // trimmed for brevity
    CellModelObject *modelObject; // this would be pulled from an array, dictionary, or some other collection

    cell.firstLabel.selected = modelObject.isFirstLabelSelected;
    cell.secondLabel.selected = modelObject.isSecondLabelSelected;
    // etc.

    return cell;
}

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

0 голосов
/ 23 июня 2011

Первое, что приходит мне в голову, - это создание nsmutablearray, в котором хранятся состояния метки, а затем использование этого массива в cellForIndexPath: для установки фона меток. Это должно сработать, но может быть и лучшее решение, которое меньше похоже на взлом.

...