views:

24

answers:

1

I'm creating custom UITableViewCells using the approach outlined on this page:

http://icodeblog.com/2009/05/24/custom-uitableviewcell-using-interface-builder/

So my cellForRowAtIndexPath code looks a bit like this:

static NSString *CellIdentifier = @"CustomCell";
TableCellWithLogo *cell = (TableCellWithLogo *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"TableCells" owner:nil options:nil];
    for (id currentObject in nibObjects)
    {   
        if ([currentObject isKindOfClass:[TableCellWithLogo class]] )
        {
            cell = (TableCellWithLogo *)currentObject;
        }
    }
}
cell.customTextLabel.text = [tableArray objectAtIndex:indexPath.row];
return cell;

Now, the table I'm creating looks like a stylized version of the grouped tableview style, with drop-shadows etc. So it needs four possible styles of table (top, center, bottom .. and top+bottom for when only a single cell is showing).

I'm having trouble working out how to put all of these table cells into one nib, and then refer to them. At the moment I have a nib with a UITableViewCell whose class is 'TableCellWithLogo'. This class has all the relevant IBOutlets. If I put several UITableViewCells in the nib (all of TableCellWithLogo class), how would I be able to differentiate between them in code? You can see in the example above I'm finding out the class:

if ([currentObject isKindOfClass:[TableCellWithLogo class]] )

..but all the classes would be the same, so I'm not sure how to differentiate?

+1  A: 

Create one empty nib and add table view cells to it. Also, for each of them create a corresponding class and assign the relevant class for each of them (see the screenshot). alt text

Then, in the cellForRowAtIndexPath you'll need to create different cells based on indexPath.row

Paul Ardeleanu
Thanks. I think you've misunderstood my question, or I didn't make myself clear enough. All of the cells have the same IBOutlets, so I wanted them to use the same class. I've solved the problem by changing the tag in IB for each Cell and then refering to them thus: `if ([(TableCellWithLogo *)currentObject tag] == 1) cell = (TableCellWithLogo *)currentObject;` etc
cannyboy
Oh, sorry about that. Glad to hear you've found a way.
Paul Ardeleanu