UITableView с разными ячейками "поведение" - PullRequest
2 голосов
/ 08 июля 2011

Я разрабатываю приложение с учетом местоположения в качестве проекта для университета, и одна из функций, которые необходимо разработать, состоит в том, чтобы показать первые пять точек интереса, наиболее близких к пользователю. Я использую табличное представление, стиль ячеек которого UITableViewCellStyleSubtitle. У меня есть некоторые проблемы, потому что помимо заголовка и подзаголовка ячейки я использую изображение (стрелку), чтобы показать направление, в котором пользователь должен следовать, чтобы достичь POI. Это изображение должно повернуться, как только изменится направление / положение устройства. Проблема в том, что работает только последняя строка табличного представления, и основная проблема заключается в том, что я не понимаю, как использовать пять разных ячеек, поскольку каждый POI может иметь разную позицию, а не положение устройства, поэтому изображение каждой ячейки должно вращаться независимо. Я сообщаю об изображении, чтобы лучше понять мою проблему.

TableView

Ниже приведен код, который я использовал для ячеек таблицы:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *tableIdentifier = @"tableIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableIdentifier] autorelease];
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.backgroundColor = [UIColor clearColor];

    NSUInteger row = [indexPath row];


    cell.detailTextLabel.text = [NSString stringWithFormat:@"Distance: %.3f Km",[...];

    UIImage *cellImage = [UIImage imageNamed:@"arrow.png"];
    cell.imageView.image = cellImage;
    self.cellImageView = cell.imageView;

    return cell;
}

Есть идеи, как использовать 5 разных ячеек, чтобы каждая стрелка имела правильный угол?!

Спасибо

1 Ответ

2 голосов
/ 08 июля 2011

Делая:

self.cellImageView = cell.imageView.

Вы даете себе ссылку только на самую последнюю из клеток. Каждый раз при настройке ячейки ваша переменная cellImageView обновляется, чтобы указывать на представление изображения этой ячейки, и вы теряете ссылку на представление изображения предыдущей ячейки .

Итак, один из способов решения вашей проблемы - накапливать изображения ячеек в массиве. Просто убедитесь, что изображение соответствует выбранному месту; ячейки могут быть повторно использованы в качестве отображения таблицы. Но табличное представление владеет этими ячейками и может связываться с ними так, как хочет для целей кэширования (отсюда и идентификатор повторного использования).

Лучшим способом было бы сотрудничать с таблицей и сообщать ей, когда что-то нужно изменить. Забудьте о своем иваре и просто установите правильный заголовок во время настройки ячейки. Нужно изменить заголовок для ячейки? Скажите столу, чтобы перезагрузить эту ячейку. Нужно изменить заголовки для всех ячеек? Просто позвоните [[self tableView] reloadData].

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

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