Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I did something similar, but not with images but buttons. If a cell wasn't selected yet and gets tabbed, the size is changed and a certain and individual number of buttons is added. If another cell was selected, this one gets closed.</p> <p><strong>Code from form the UITableViewController</strong></p> <p>interface:</p> <pre><code>int openedCellIndex;//&lt;-what cell is selected int buttonCounter; </code></pre> <p>implementation: </p> <pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if ( indexPath.row != openedCellIndex ) { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[TRTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; //cell.frame = CGRectMake (0,0, 320, 100); } id &lt;P_E_P1Article&gt; article = [self.fetchedResultsController objectAtIndexPath:indexPath]; cell.textLabel.text = article.name; if ( self.cellBackgroundColor ) cell.backgroundColor = self.cellBackgroundColor; return cell; } else { //get article id &lt;P_E_P1Article&gt; article = [self.fetchedResultsController objectAtIndexPath:indexPath]; //number of buttons int buttons = [article.specification count]; int height = 50 * ceil(buttons / 2) + 50; //construct special cell UITableViewCell *cell = [[[TRTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellBig"] autorelease]; cell.frame = CGRectMake (0,0, 320, 150); cell.textLabel.text = @""; //add label UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 280, 30)]; label.font = [UIFont boldSystemFontOfSize:17]; label.text = article.name; label.backgroundColor = [UIColor clearColor]; [cell addSubview:label]; [label release]; if ( buttonMapper == nil ) self.buttonMapper = [NSMutableDictionary dictionaryWithCapacity:10]; //NSLog (@" bla: %@", article.isFreePrice); //see if we have a free prized article //create the buttons NSEnumerator *enumerator = [article.specification objectEnumerator]; id &lt;P_E_P1ArticleSpecification&gt; spec; int count = 0; NSArray *specs = [self sortedArticleSpecifications:article]; for ( spec in specs ) { //see which row and col the button is in int row = floor ( count / 2 ); int col = count % 2; //define button position int left = 20 + col * 145; int top = 45 + row * 50; //create button UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame = CGRectMake(left, top, 135, 40); [cell addSubview:button]; [button setTitleColor:[UIColor blackColor] forState:0]; [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; //remember which article the button is attached to buttonCounter++; button.tag = buttonCounter; [buttonMapper setValue:spec forKey:[NSString stringWithFormat:@"bla%d",buttonCounter]]; count++; } if ( self.cellBackgroundColor ) cell.backgroundColor = self.cellBackgroundColor; return cell; } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if ( openedCellIndex == indexPath.row ) { id &lt;P_E_P1Article&gt; article = [self.fetchedResultsController objectAtIndexPath:indexPath]; int count = [article.specification count]; int height = 50 * ceil(count / 2.) + 50; return height; } return 50; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; [self openRow:indexPath.row]; [self.searchBar resignFirstResponder]; } - (void) openRow:(int) index { if ( index == openedCellIndex ) return; int oldIndex = openedCellIndex; openedCellIndex = index; NSUInteger indexArr[] = {0, oldIndex}; NSIndexPath *oldPath = [NSIndexPath indexPathWithIndexes:indexArr length:2]; NSUInteger indexArr2[] = {0, openedCellIndex}; NSIndexPath *newPath = [NSIndexPath indexPathWithIndexes:indexArr2 length:2]; //update view [(UITableView *)self.view beginUpdates]; if ( oldIndex &gt;= 0 ) [(UITableView *)self.view reloadRowsAtIndexPaths:[NSArray arrayWithObject:oldPath] withRowAnimation:UITableViewRowAnimationFade]; if (openedCellIndex &gt;=0 ) [(UITableView *)self.view reloadRowsAtIndexPaths:[NSArray arrayWithObject:newPath] withRowAnimation:UITableViewRowAnimationFade]; [(UITableView *)self.view endUpdates]; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload