iOS - UiTableviewCell - 背景图像一次仅显示在一个单元格上

时间:2012-04-15 01:10:53

标签: iphone ios uitableview background-image

我已经使用UIAppearance在我的应用程序中设置表格单元格的背景图像。

[[UITableViewCell appearance] setBackgroundView:[ [UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"list_bg.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]];

但是,当我查看列表时,仅为屏幕上的一个单元格设置背景图像。如果我滚动屏幕,背景图像将设置在出现在视图中的单元格上,但它不会在任何其他可见单元格上设置此bg图像。

任何人都知道最新情况怎么样?我认为通过设置UITableviewCell的UIAppearance,这种类型的所有实例都会自动获取背景图像。

由于

布赖恩

这是我的cellForRowAtIndexPath方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"plantCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"PlantListCell" owner:self options:nil];
    cell = _plantCell;
    self.plantCell = nil;
}


Plant *plant = [self.fetchedResultsController objectAtIndexPath:indexPath];

UIImageView *thumbnail = (UIImageView *)[cell viewWithTag:1];
thumbnail.image = [UIImage imageNamed:[plant.name stringByAppendingString:@"_S"]];

UILabel *label = (UILabel *)[cell viewWithTag:2];
label.text = plant.name;

UIImageView *set = (UIImageView *)[cell viewWithTag:3];
set.image = [UIImage imageNamed:@"set"];

UIImageView *favourite = (UIImageView *)[cell viewWithTag:4];
favourite.image = [UIImage imageNamed:@"fav"];

return cell;
}

4 个答案:

答案 0 :(得分:5)

是的。这个问题是你告诉UITableViewCell类为每个表格视图单元格的背景视图设置一个UIImageView。一旦设置为1,就将其从之前的superview中删除,并添加到新的UITableViewCell中。你没有在每个tableViewCell上设置重复的UIImageViews;您将在每个表格视图单元格中获得一个视图集。

然后从每个tableViewCell设置并取消设置,直到它设置的最后一个。

使用此方法的外观代理将其设置在UITableViewCell的每个对象上。

我不会使用外观代理来设置背景视图方法,因为传递给它的任何视图都是一个视图,一次只能应用于一个单元格。

我的建议是独立地为每个单元格创建一个视图,或者创建一个在初始化时设置它的子类。

答案 1 :(得分:2)

感谢barcodeproject。它有点理智,但我不明白为什么Apple不允许我们设置UITableviewCell背景图像,如果它真的没有用。 我最后通过在cellForRowAtIndexPath方法中设置图像来使用一个简单的解决方案。

cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"list_bg.png"]];

它工作正常,但如果你有很多表并且想要以通用的方式设置它,那就不好了。

干杯

布赖恩

答案 2 :(得分:1)

我通过创建一个名为CustomizableUITableCell的基类并为背景图像设置ui外观值来解决这个问题。然后每当我用自定义背景创建一个我需要的单元格时,我就简单地定义了CustomizableUITableCell。

//标题

#import <UIKit/UIKit.h>

@interface CustomizableUITableCell : UITableViewCell <UIAppearance>

@property (nonatomic, weak) UIColor *backgroundCellColor UI_APPEARANCE_SELECTOR;

@end

//实施

#import "CustomizableUITableCell.h"

@implementation CustomizableUITableCell

@synthesize backgroundCellColor;

#pragma mark - Public Methods.

-(void)setBackgroundCellColor:(UIColor *)backgroundColor
{
    [super setBackgroundColor:backgroundColor];
}

@end

然后,您可以使用外观代理设置它。

[[CustomizableUITableCell appearance] setBackgroundCellColor:[UIColor colorWithPatternImage:backgroundImage]];

答案 3 :(得分:0)

cell.backgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"1.jpg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];

对我有用..