David Biga
David Biga

Reputation: 2801

Adjusting Cell fields - Objective C

I have a dynamically set table view controller that is used to populate a news type feed. I am having trouble connecting one class to the other for setting the text, image, etc... of that current cell.

Here is the gist:

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

    FBGTimelineCell *cell = (FBGTimelineCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.text = [self.googlePlacesArrayFromAFNetworking[indexPath.row] objectForKey:@"message"]; <!-- here is where I want to for example, set the title to the message within this array.
    if (!cell)
    {
        cell = [[FBGTimelineCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        [cell initTimelineCell];
    }

    UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", indexPath.row]];
    cell.photoView.image = img;
    return cell;
}

Here is the FBH... init function:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

        // Initialization code
        cellContentView = [[UIView alloc] initWithFrame:CGRectMake(10, 5, 300, 440)];
        cellContentView.backgroundColor = [UIColor whiteColor];

        photoView = [[FBGTimelinePhotoView alloc] initWithFrame:CGRectMake(5, 102, 310, 310)];
        photoView.backgroundColor = [UIColor darkGrayColor];
        [photoView setUserInteractionEnabled:YES];

        UIView *profilePic = [[UIView alloc] initWithFrame:CGRectMake(9, 9, 30, 30)];
        profilePic.backgroundColor = [UIColor darkGrayColor];

        UILabel *usernameLabel = [[UILabel alloc] initWithFrame:CGRectMake(45, 9, 222, 18)];
        usernameLabel.font = [UIFont systemFontOfSize:14.0];
        usernameLabel.text = @"Username";

        UILabel *timestampLabel = [[UILabel alloc] initWithFrame:CGRectMake(45, 25, 222, 17)];
        timestampLabel.font = [UIFont systemFontOfSize:12.0];
        timestampLabel.text = @"3 hours ago";
        timestampLabel.textColor = [UIColor lightGrayColor];

        UILabel *statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(9, 50, 283, 41)];
        statusLabel.font = [UIFont systemFontOfSize:15.0];
        statusLabel.text = @"Status..status..status..status..status..status..status..status..status..status..status..status..status..status..status..";
        statusLabel.numberOfLines = 2;
        statusLabel.lineBreakMode = NSLineBreakByWordWrapping;

        UILabel *likeLabel = [[UILabel alloc] initWithFrame:CGRectMake(9, 413, 32, 21)];
        likeLabel.font = [UIFont systemFontOfSize:13.0];
        likeLabel.text = @"Like";

        UILabel *commentLabel = [[UILabel alloc] initWithFrame:CGRectMake(113, 413, 74, 21)];
        commentLabel.font = [UIFont systemFontOfSize:13.0];
        commentLabel.text = @"Comment";

        UILabel *shareLabel = [[UILabel alloc] initWithFrame:CGRectMake(246, 413, 46, 21)];
        shareLabel.font = [UIFont systemFontOfSize:13.0];
        shareLabel.text = @"Share";

        [self addSubview:cellContentView];
        [self addSubview:photoView];
        [cellContentView addSubview:profilePic];
        [cellContentView addSubview:usernameLabel];
        [cellContentView addSubview:timestampLabel];
        [cellContentView addSubview:statusLabel];
        [cellContentView addSubview:likeLabel];
        [cellContentView addSubview:commentLabel];
        [cellContentView addSubview:shareLabel];


    }
    return self;
}

So I need to be able to set the cell text and different views within the cell within the cellForRowAtIndexPath if possible for each cell that is set up in the FB..init function.

Suggestions, thoughts?

Upvotes: 0

Views: 59

Answers (2)

Suhail Bhat
Suhail Bhat

Reputation: 453

You can create properties for all the dynamic values which are expected to be changed with each cell. Those properties you can set in your cellForRowAtIndexPath method.

eg. cell.statusText = [NSString stringWithFormat:@"%@ is rocking!!", indexPath.row];

Public properties like statusText you can add all the UIElements expecting to be dynamically added.

Hope it helps. Cheers.

Upvotes: 0

rdelmar
rdelmar

Reputation: 104082

You should create properties (in the FBGTimelineCell class) for each of the UI elements that you need to access in cellFroRowAtIndexPath, then you can access them with cell.propertyName.

Upvotes: 2

Related Questions