UITableView фоновое изображение - PullRequest
4 голосов
/ 16 февраля 2010

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

В качестве предварительной попытки реализовать это я использовал следующий код:

- (void)viewDidLoad {
    aTableView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"cloud.jpg"]];
    aTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}

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

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

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

Приветствия


Мне удалось отсортировать это, используя следующий код:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
        [cell setBackgroundColor:[UIColor colorWithPatternImage: [UIImage imageNamed: @"cloud.jpg"]]];
}

Это лучший способ установить UIColor в качестве UIImage или это ресурсоемкий процесс?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2010

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

Создание подкласса UITableViewCell может показаться сложной задачей, но оно того стоит, если вам потребуется настроить ячейку в будущем и, похоже, она будет выполнять то, что вы запрашиваете. Я могу опубликовать код для вас из моего проекта, если вам интересно. Однако учтите, что у вас не будет фона для самого UITableView, только для ячеек.

РЕДАКТИРОВАТЬ: размещение кода, связанного с созданием пользовательского UITableViewCell: Моя ячейка называется HotOffersCell, Это HotOffersCell.h

#import <UIKit/UIKit.h>
@interface HotOffersCell : UITableViewCell {
    IBOutlet UILabel *mainLabel;
    IBOutlet UILabel *subLabel;
    IBOutlet UILabel *price;
    IBOutlet UIImageView *imageView;
}
@property (nonatomic, retain) UILabel *mainLabel;
@property (nonatomic, retain) UILabel *subLabel;
@property (nonatomic, retain) UILabel *price;
@property (nonatomic, retain) UIImageView *imageView;

@end

HotOffersCell.m очень прост, просто sysnthesize для всех свойств, ничего больше Затем в методе TableView вашего контроллера табличного представления:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"HotOffersCell";

    HotOffersCell *cell = (HotOffersCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"HotOffersCell" owner:nil options:nil];
        for (id currentObject in topLevelObjects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = (HotOffersCell *) currentObject;
                break;
            }
        }
    }
    NewsItem *newsItem = [newsList objectAtIndex:indexPath.row];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"d MMM YY"];
    NSString *date = [formatter stringFromDate:newsItem.departure_date];
    if (indexPath.row % 2 == 0) {
        cell.contentView.backgroundColor = [UIColor colorWithWhite:230.0/255 alpha:1]; // Match Colour
    } else {
        cell.contentView.backgroundColor = [UIColor colorWithWhite:242.0/255 alpha:1]; // Match Colour
    }

    cell.mainLabel.text = newsItem.destination;
    cell.subLabel.text = [[NSString alloc] initWithFormat:@"%@ - %@ nights", date, newsItem.nights];
    if ([self.navigationController.title isEqualToString:@"Top 20"]) {
        cell.price.text = newsItem.price_inside;
    } else {
        cell.price.text = newsItem.price_balcony;
    }
    cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@.png", newsItem.cruise_line]];

    [formatter release];        
    return cell;
}

У меня также есть HotOffersCell.xib. Этот файл содержит UITableViewCell и не имеет представления, я связал все соответствующие ярлыки и ничего более. Он предоставляет хороший графический способ редактирования мест размещения на ярлыке без изменений в коде Я даже позволил моему брату изменить это =)

Надеюсь, это поможет

1 голос
/ 16 февраля 2010
0 голосов
/ 16 февраля 2010

Вы устанавливаете фон UITableView. Не фон UITableViewCell.

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