1

I have a custom UITableViewCell that contains several labels and an image view that can be one of three icons depending on a value in each item represented by the cell. All of my labels are updating properly, but the value of the image name is always nil. The image name is declared as a property of type NSString.

The custom cell is called FavoriteCell and all the values are setting properly except the NSString value "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;
}

The values are being set in my table view controller's cellForRowAtIndexPath method shown here. For now, I'm just hard coding a value for testing. The hard coded value is not carrying over to the custom cell.

-(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;
}

Have I missed something obvious? Thanks!

4

2 回答 2

1

这是正常的,因为当你没有设置 imgName 时你的代码正在运行,你设置它然后你的 init 代码运行。狐狸修复它从您的自定义单元格中删除代码 UIImage 和 NSString 并将其设置到您的 imageView 中,然后当您将单元格设置为 -tableView:cellForRowAtIndexPath:byimageView.image = [UIImage imageNamed:@"thumbsUp.png"];

于 2013-10-28T16:20:08.777 回答
0

好吧,乍一看,您说imgName日志为 nil 的那一刻似乎是因为您实际上并没有设置imgName直到initWithStyle被调用。或者我对你期望发生的事情有什么遗漏?

于 2013-10-28T16:14:18.160 回答