You can create a separate NIB to store your table cell. In viewDidLoad register your Nib file for each cell type:
#define kMyCellIdentifier @"kMyCellIdentifier"
....
- (void)viewDidLoad
{
UINib *tableCellNib = [UINib nibWithNibName:@"MyCell" bundle:nil];
[self.tableView tableCellNib forCellReuseIdentifier:kMyCellIdentifier];
}
Then, you can create that cell when asked for. Since you've registered the Nib iOS will handle creating the cell for you if there isn't already one to be dequeued:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kMyCellIdentifier];
// Configure cell...
return cell;
}
You can also create prototype cells in Storyboards directly in IB, but ff you have a universal application it's a pain since you'll need to maintain both an iPad and an iPhone version of the same cell.