自定义UITableViewCell中的设置属性困难

时间:2013-10-28 16:09:02

标签: ios objective-c xcode uitableview properties

我有一个自定义UITableViewCell,它包含多个标签和一个图像视图,可以是三个图标之一,具体取决于单元格所代表的每个项目中的值。我的所有标签都正确更新,但图像名称的值始终为零。图像名称声明为NSString类型的属性。

自定义单元格名为FavoriteCell,除NSString值“imgName”

外,所有值均已正确设置

FavoriteCell.h:

@interface FavoriteCell : UITableViewCell

@property (nonatomic, strong) UILabel *lblMainTitle;
@property (nonatomic, strong) UILabel *lblGaugeID;
@property (nonatomic, strong) UILabel *lblGaugeLastUpdate;
@property (nonatomic, strong) UILabel *lblGaugeHeight;
@property (nonatomic, strong) UILabel *lblGaugeCFS;
@property (nonatomic, strong) UIImage *bgImage;
@property (nonatomic, strong) UIImageView *goodToGoImage;
@property (nonatomic, strong) NSString *imgName;

@end

FavoriteCell.m:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    bgImage = [UIImage imageNamed:@"tableCellBG.png"];
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {
        UIColor *transparentBG = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0];

        CGSize size = self.contentView.frame.size;
        //self.backgroundView = [[UIImageView alloc] initWithImage:bgImage];
        self.lblMainTitle = [[UILabel alloc] initWithFrame:CGRectMake(8.0, -10, size.width-20, size.height-40)];
        [self.lblMainTitle setFont:[UIFont boldSystemFontOfSize:15]];
        [self.lblMainTitle setTextAlignment:NSTextAlignmentLeft];
        [self.lblMainTitle setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
        [self.lblMainTitle setBackgroundColor:transparentBG];

        self.lblGaugeID = [[UILabel alloc] init];

        self.lblGaugeLastUpdate = [[UILabel alloc] initWithFrame:CGRectMake(9, 14, size.width-40, size.height)];
        [self.lblGaugeLastUpdate setFont:[UIFont systemFontOfSize:14]];
        [self.lblGaugeLastUpdate setBackgroundColor:transparentBG];

        self.lblGaugeHeight = [[UILabel alloc] initWithFrame:CGRectMake(8, 45, size.width-40, size.height)];
        [self.lblGaugeHeight setFont:[UIFont boldSystemFontOfSize:21]];
        [self.lblGaugeHeight setBackgroundColor:transparentBG];

        self.lblGaugeCFS = [[UILabel alloc] initWithFrame:CGRectMake(120, 45, size.width-40, size.height)];
        [self.lblGaugeCFS setFont:[UIFont boldSystemFontOfSize:21]];
        [self.lblGaugeCFS setBackgroundColor:transparentBG];

        NSLog(@"IMAGE NAME: %@\n", imgName); // imgName is nil

        UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(220, 40, 40, 40)];
        [imgView setImage:[UIImage imageNamed:imgName]];

        [self.contentView addSubview:lblMainTitle];
        [self.contentView addSubview:lblGaugeHeight];
        [self.contentView addSubview:lblGaugeLastUpdate];
        [self.contentView addSubview:lblGaugeCFS];
        [self.contentView addSubview:imgView];

        self.editingAccessoryType = UITableViewCellAccessoryDetailButton;
    }
    return self;
}

这些值是在我的表视图控制器的cellForRowAtIndexPath方法中设置的。就目前而言,我只是在编码测试值。硬编码值不会转移到自定义单元格。

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

    FavoriteCell *cell = (FavoriteCell*)[tableView dequeueReusableCellWithIdentifier:cellID];
    if(cell == nil){
        cell = [[FavoriteCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
    }
    Favorite *fave = [allFavoriteObjects objectAtIndex:indexPath.row];

    NSString *currFeet = [NSString stringWithFormat:@"%.02fft", [fave.currentFeet doubleValue]];
    NSString *currFlow = [NSString stringWithFormat:@"%dcfs", [fave.currentCFS intValue]];


    [cell setImgName:@"thumbsUp.png"];
    [cell.lblMainTitle setText:[fave stationRealName]];
    [cell.lblGaugeID setText:[fave stationIdentifier]];
    [cell.lblGaugeCFS setText:currFlow];
    [cell.lblGaugeHeight setText:currFeet];
    return cell;
}

我错过了一些明显的东西吗?谢谢!

2 个答案:

答案 0 :(得分:1)

这是正常的,因为当你没有设置imgName时代码正在运行,你设置它然后运行你的init代码。 fox修复它从自定义单元格中删除代码UIImage和NSString并将其设置为imageView然后当您通过-tableView:cellForRowAtIndexPath:

将单元格放入imageView.image = [UIImage imageNamed:@"thumbsUp.png"];

答案 1 :(得分:0)

嗯,乍一看,您将imgName日志记录为nil的那一刻似乎是因为在调用imgName之前您实际上并未设置initWithStyle。或者有什么我想念你会发生什么?