UITableView背景图片

时间:2010-02-15 23:33:49

标签: iphone uitableview

我正在尝试设置一个滚动背景的表格视图。背景是重复的云图像。

作为实现此目的的初步尝试,我使用了以下代码:

- (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 个答案:

答案 0 :(得分:2)

我有完全相同的问题,除了实现的一半,我们决定废弃设计并转而使用自定义tableview单元格。我们的原始设计看起来像一个记事本,每行都有单元格。

对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 :(得分:1)

答案 2 :(得分:0)

您正在设置UITableView的背景。不是UITableViewCell的背景。