无法在自定义UITableViewCell中更改透明BG(分组表视图)

时间:2011-07-26 03:00:33

标签: iphone ios uitableview custom-cell

UITableViews(分组和普通)中有关于单元格背景(自定义或标准)的各种问题有很多帖子,但我没有提到这个具体问题。

基本上我有一个带有分组样式的UITableView。

问题:我无法让自定义单元格显示透明背景以外的任何内容。

在我实现自定义单元格之前,这是我的tableview的样子(即这只是一个普通的分组表视图):

enter image description here

标准,正常分组Tableview。大。但我想要自定义单元格。

所以我构建了一个如下所示的自定义单元格:

enter image description here

使用此层次结构:

enter image description here

此单元格的背景元数据:

enter image description here

不幸的是,无论我做什么,无论是将背景改为白色,清晰,甚至是黑色,都没有什么区别,我的桌面视图仍然看起来像这样:

enter image description here

(这是表视图背景,fwiw。即这些单元格现在是透明的。)

当然,我无法通过改变我添加到单元格中的 View 的背景来解决这个问题,因为那时所有内容都看起来像这样(注意没有圆角等等):

enter image description here

这显然是丑陋和不可接受的。

如何使细胞具有正常的白色背景,如标准默认细胞?奇怪的是,对于上周的应用程序,我在完全完成相同的程序后制作了一个自定义单元格,并且这些背景显示为白色。

我错过了什么?我需要的只是我的自定义单元格具有符合分组表格视图的弯曲顶部和底部角落的白色背景。我在其他实现中看到白色背景,所以我知道可以使用自定义单元格。但有些东西在这里不起作用!

我很高兴发布任何代码,只是不确定需要/想要什么。这是我的cellForRowAtIndexPath方法(这只是tableView的核心数据版本:cellForRowAtIndexPath :):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForManagedObject:(NSManagedObject *)managedObject
{
    static NSString *ReuseIdentifier = @"customSummaryCell";

    CustomSummaryTableViewCell *cell = (CustomSummaryTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ReuseIdentifier];
    if (cell == nil) {
        NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomSummaryTableViewCell" owner:nil options:nil];
        for (id currentObject in nibObjects) {
            if([currentObject isKindOfClass:[CustomSummaryTableViewCell class]])
            {
                cell = (CustomSummaryTableViewCell *)currentObject;
            }
        }
    }

    cell.leftLabel.text = @"Some data";
    cell.rightLabel.text = @"Some Info"; 

    return cell;
}

我的班级文件基本上应该保持不变,但在这里它们是。我的自定义单元类的.h文件:

import

@interface CustomSummaryTableViewCell : UITableViewCell {

    IBOutlet UIView *backgroundView;
    IBOutlet UILabel *leftLabel;
    IBOutlet UILabel *rightLabel;
}

@property (nonatomic, retain) IBOutlet UIView *backgroundView;
@property (nonatomic, retain) IBOutlet UILabel *leftLabel;
@property (nonatomic, retain) IBOutlet UILabel *rightLabel;


@end

.m文件:

导入“CustomSummaryTableViewCell.h”

@implementation CustomSummaryTableViewCell
@synthesize backgroundView;
@synthesize leftLabel;
@synthesize rightLabel;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

- (void)dealloc
{
    [leftLabel release];
    [rightLabel release];
    [backgroundView release];
    [super dealloc];
}

@end

请注意,我已将将xib中的单元格类更改为CustomSummaryTableViewCell

任何帮助都会在这里受到高度赞赏,不确定问题是什么,这让我疯了!

提前致谢。

2 个答案:

答案 0 :(得分:1)

我发现向单元格添加子视图比实现自定义单元格更容易。在您的情况下,在一个单元格中有两个标签,这看起来很容易。

编辑 - 简化示例

-(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath
{
    . . .
    UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, labelWidth, labelHeight)];
    [label2 setText:@"Something"];

    [[cell contentView] addSubview:label2];

    return cell;
}

编辑 - 这是一个真实的完整示例:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusableCell];

    if(cell == nil)
    {        
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusableCell] autorelease];

        thumbnail = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 106, 81)];

        feedTitle = [[UILabel alloc] initWithFrame:CGRectMake(116, 3, [IOSDevice screenWidth] - 140, 25)];
        postDate = [[UILabel alloc] initWithFrame:CGRectMake(116, 10, [IOSDevice screenWidth] - 140, 50)];
        description = [[UILabel alloc] initWithFrame:CGRectMake(116, 45, [IOSDevice screenWidth] - 140, 50)];

        // setting tag reminders so we can identify the element to replace
        [thumbnail setTag:1];
        [feedTitle setTag:2];
        [postDate setTag:3];
        [description setTag:4];

        [[cell contentView] addSubview:thumbnail];
        [[cell contentView] addSubview:feedTitle];
        [[cell contentView] addSubview:description];
        [[cell contentView] addSubview:postDate];

        [thumbnail release];
        [feedTitle release];
        [description release];
        [postDate release];
    }

    thumbnail = (UIImageView *)[[cell contentView] viewWithTag:1];
    feedTitle = (UILabel *)[[cell contentView] viewWithTag:2];
    postDate = (UILabel *)[[cell contentView] viewWithTag:3];
    description = (UILabel *)[[cell contentView] viewWithTag:4];

    [feedTitle setBackgroundColor:[UIColor clearColor]];
    [feedTitle setFont:[UIFont fontWithName:@"Helvetica-Bold" size:16]];
    [feedTitle setTextColor:[UIColor colorWithRed:0.215 green:0.215 blue:0.215 alpha:1.0]];

    [description setBackgroundColor:[UIColor clearColor]];
    [description setFont:[UIFont fontWithName:@"Helvetica" size:12]];
    [description setTextColor:[UIColor colorWithRed:0.328 green:0.328 blue:0.328 alpha:1.0]];
    [description setNumberOfLines:2];
    [description setLineBreakMode:UILineBreakModeWordWrap];

    [postDate setBackgroundColor:[UIColor clearColor]];
    [postDate setFont:[UIFont fontWithName:@"Helvetica" size:12]];
    [postDate setTextColor:[UIColor colorWithRed:0.707 green:0.180 blue:0.141 alpha:1.0]];

    [thumbnail setImage:[[items objectAtIndex:[indexPath row]] objectForKey:@"thumb"]];

    [feedTitle setText:[[items objectAtIndex:[indexPath row]] objectForKey:@"title"]];
    [description setText:[[items objectAtIndex:[indexPath row]] objectForKey:@"summary"]];

    // Format date
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];

    [postDate setText:[dateFormatter stringFromDate:[[items objectAtIndex:[indexPath row]] objectForKey:@"date"]]];

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

    if([feedList contentOffset].y < -50)
    {
        shouldUpdate = TRUE;

        [activityIndicator stopAnimating];

        [feedList setContentOffset:CGPointMake(0, -30) animated:NO];
        [self loadData];

        loadingLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, -25, [IOSDevice screenWidth], 20)];
        [loadingLabel setText:@"Loading New Data"];
        [loadingLabel setTextAlignment:UITextAlignmentCenter];
        [loadingLabel setBackgroundColor:[UIColor clearColor]];
        [loadingLabel setTextColor:[UIColor colorWithRed:0.215 green:0.215 blue:0.215 alpha:1.0]];
        [loadingLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14]];

        reloadingSpinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(70, -25, 20, 20)];
        [reloadingSpinner setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
        [reloadingSpinner startAnimating];
        [reloadingSpinner setHidesWhenStopped:YES];

        [feedList addSubview:reloadingSpinner];
        [feedList addSubview:loadingLabel];
    }

    return cell;
}

答案 1 :(得分:0)

在nib文件中检查UITableViewCell视图的Alpha和背景。

Alpha应为1.0。