Нет необходимости реализовывать эти логические значения. UITableViewCell имеет свойство ' selected ', которое можно установить в YES, когда пользователь выбирает ячейку.
Ваш UITableViewDelegate обратный вызов - tableView didSelectRowAtIndexPath должен использоваться для установки изображения ячейки (я делаю это, устанавливая изображение UIImageView, добавленного как подпредставление для contentView ячейки), как показано:
[cell.contentView addSubview: yourImageView];
Возможно, вы хотите отслеживать последнюю ячейку, которая была установлена в выбранное состояние. Это можно сделать, сохранив NSIndexPath ячейки, которая была ранее выбрана. В didSelectRowForIndexPath сначала прочитайте этот путь индекса, возьмите соответствующую ячейку и установите ее изображение как невыбранное.
Я предлагаю для этого создать подкласс UITableViewCell, чтобы вы могли реализовать метод, который принимает UIImageView в качестве аргумента и устанавливает его в наборе UIImageView в качестве фонового изображения ячейки.
Код должен выглядеть следующим образом:
Метод установки изображения в подклассе UITableViewCell:
- (void)setCellBackgroundImage:(UIImage*)inImage
{
backgroundImageView.image = inImage;
}
Обратите внимание, что 'backgroundImageView - это ивар UIImageView, который вы будете использовать в своем подклассе UITableViewCell. Когда вы настраиваете свою ячейку, добавьте этот вид изображения в contentView вашей ячейки, как показано ранее.
Как только ваша ячейка настроена с помощью этого метода, ваш метод didSelectRowAtIndexPath должен выглядеть примерно так (обратите внимание, что oldSelectedCell имеет тип NSIndexPath, который содержит indexpath вашей старой выбранной ячейки):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIImage *selectedImage = [UIImage imageNamed:@"path/to/your/selected/image.png"];
UIImage *deSelectedImage = [UIImage imageNamed:@"path/to/your/deselected/image.png"];
if(oldSelectedCell != nil)
{
//Assuming SubclassedCell is the name of your subclass of UITableViewCell
SubclassedCell *cell = (SubclassedCell*)[tableView cellForRowAtIndexPath:oldSelectedCell];
//Set the previously selected cell's image to be the deselected image
[cell setCellBackgroundImage:deSelectedImage];
//Set the cell to be deselected
cell.selected = NO;
}
//Set the current cell's image
SubclassedCell *cell = (SubclassedCell*)[tableView cellForRowAtIndexPath:indexPath];
[cell setBackgroundImage:selectedImage];
cell.selected = YES;
//Save this cell's indexpath to be the previously selected cell for the next time this method is invoked
oldSelectedCell = indexPath;
//And you're done!
}
Свойство selected для ячейки может быть использовано для настройки ее представлений так, как вам нравится в реализации layoutSubviews вашей подклассовой ячейки. Проверьте значение этого свойства и настройте ячейку так, как вам нравится.