Несколько пользовательских UITableViewCells - ReuseIdentifier и НЕ повторное использование ячеек - PullRequest
2 голосов
/ 25 октября 2009

У меня проблема с тем, как iPhone повторно использует ячейки в таблице. Проблема в том, что реализованные методы класса также «повторно используются», и изменения в одной ячейке применяются к другим ячейкам, которые были повторно использованы. У меня есть индикатор прогресса, который должен обновляться только в одной ячейке после взаимодействия с пользователем, но индикатор прогресса обновляется, и метод также работает внутри 6-й ячейки вниз. Это происходит и во 2-й и 7-й ячейке.

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

 CustomTableCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];

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

Мне нужно знать, есть ли быстрый и безболезненный способ заставить iPhone просто рисовать каждую клетку отдельно, без повторного использования. Есть ли способ использовать быструю итерацию или цикл for для создания отдельной ячейки для каждой строки в источнике данных?

Пожалуйста, позвольте мне повторить, у меня никогда не будет больше, чем 7 или 8 ячеек в одной таблице на данном viewController.

Ответы [ 3 ]

2 голосов
/ 25 октября 2009

Если вы действительно хотите это сделать ... установите массив в viewDidLoad длиной 7 или 8. Сделать [[UITableView alloc] initWithStyle:UITabeViewCellStyle… reuseIdentifier:@"whatever"] 7 или 8 раз, затем в cellForRowAtIndexPath вернуть ячейку из массива. Обязательно освободите массив ячеек в методе dealloc.

0 голосов
/ 20 ноября 2009

То, что, в конце концов, сработало для меня, было программно делать макет. Использование конструктора интерфейса для TableViewCells просто глючит. Создание класса TableViewCell и метода layoutSubviews с множеством CGRects и свойств фрейма - вот что заставило его работать. Несмотря на то, что ячейки используются повторно, фактические данные INSIDE THE CELL не перезаписываются.

0 голосов
/ 25 октября 2009

Если вы используете только 7 строк - reuseIdentifyer бесполезен. Как это работает? Представьте, что вы прокручиваете таблицу с несколькими строками вниз. Есть момент, когда один из рядов будет скрыт, а другой будет показан. Только тогда таблица получает ячейку от reusecellidentifyer. Он не выделяет память для другой ячейки. Он берет скрытый ряд и использует его для отображения нового ряда. Извините за мой английский)

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