Проблема с созданием приложения для контрольного списка (похожего на образец кода TouchCells) для iPhone. Случайные ячейки проверяются - PullRequest
2 голосов
/ 25 октября 2009

У меня возникла проблема при создании контрольного списка в стиле примера TouchCells из примера кода Apple. По сути, это таблица, которая позволяет многократно выбирать элементы и ставит галочку для каждого выбранного элемента.

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

Я не мог понять, что я делаю неправильно, поэтому я протестировал это с помощью кода Apple TouchCells. В их программе, однако, они имеют только 6 ячеек, и нет места для прокрутки. Итак, я продублировал некоторые элементы из файла plist, чтобы создать больше ячеек, и ... появляется та же проблема. Если вы выберете ячейку, а затем прокрутите, другая ячейка будет выбрана случайным образом.

Обновление Я недавно попробовал пример кода iPhone Dev Cookbook под названием «Проверки» и ... как вы уже догадались, та же проблема. Вот ссылка: http://code.google.com/p/cookbooksamples/downloads/list

Это сводит меня с ума. Это ошибка или я что-то не так делаю? Кто-нибудь знает как это исправить?

Спасибо!

Кроме того, кто-нибудь знает какой-либо пример кода, который показывает, как это сделать?

Ответы [ 3 ]

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

Вы, вероятно, делаете это:

if (whatever) {
  cell.accessoryType = UITableViewCellAccessoryCheckMark;
}

Когда вы должны это сделать:

if (whatever) {
  cell.accessoryType = UITableViewCellAccessoryCheckMark;
} else {
  cell.accessoryType = UITableViewCellAccessoryNone;
}

Если вы используете пользовательскую ячейку, вы можете переопределить prepareForeReuse:

- (void)prepareForReuse {
  [super prepareForReuse];
  self.accessoryType = UITableViewCellAccessoryNone;
}
1 голос
/ 25 октября 2009

У меня похожая проблема с пользовательским UITableViewCell в моем приложении. Согласно документам Apple на prepareForReuse : «вы должны сбрасывать только те атрибуты ячейки, которые не связаны с содержимым, например альфа, редактирование и состояние выбора».

Пример TouchCells связан с состоянием выделения, но они используют логическое значение и изображения для имитации выделения. Пока что единственное, что я нашел для работы - это использование уникального идентификатора повторного использования для каждой ячейки. Что-то вроде победы над целями повторного использования, не так ли?

Например, чтобы решить проблему в примере TouchCells, замените:

static NSString *kCustomCellID = @"MyCellID";

с:

NSString *kCustomCellID = [NSString stringWithFormat:@"MyCellID%d", indexPath.row];

Полагаю, это нормально, если у вас небольшое количество клеток, но должен быть лучший способ, верно?

0 голосов
/ 23 марта 2010

Нашли решение после мучительного ночного поиска ...

В функции checkAction в CustomCell.m (ссылаясь на пример TouchCells) используйте setBackgroundImage, а не setImage.

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