How to programmatically increase UITableView cell's height in iPhone?

ios, iphone, objective-c, uitableview

Solution

First of all take a `bool` & `int` variable.

BOOL isReadMoreButtonTouched = NO;
int indexOfReadMoreButton = -1;

Then Implement below with your code

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    [[cell btnReadmore] setTag:[indexPath row]];

    if(isReadMoreButtonTouched && [indexPath row]== indexOfReadMoreButton)
    {
       // design your read more label here
    }
}

Now implement IBAction

-(IBAction) funReadmore:(id)sender
{
    UIButton *readMoreButton = (UIButton *)sender;
    indexOfReadMoreButton=[readMoreButton tag];
    isReadMoreButtonTouched=YES;

    [[self tableView] beginUpdates];
    [[self tableView] reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem: indexOfReadMoreButton inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
    [[self tableView] endUpdates];
}

Now Come to `heightForRowAtIndexPath`

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(isReadMoreButtonTouched && [indexPath row]== indexOfReadMoreButton) return 200.0f;
    else return 100.0f;
}

Hope it'll work for you.

Problem

I having the separate custom `UITableViewCell` for displaying the data(these data come from server JSON response).In each `UITableViewCell` i am having button as read more.If the user clicks read more button i want to programmatically add `UILabel` for displaying additional information from server.But initially i set `UITableViewCell` height so after clicking read more button i cant able to see the additional inforamtion `UILabel`.. This is the screen shot: This is my required screen: This is the following coding i used: ``` -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { int height1; if(readMore){ height1=200; NSLog(@"Clicked"); } else{ height1=100; NSLog(@"Not clicked"); } return height1; // Normal height } -(NSInteger) tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section { return [TitleArr count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { static NSString *simpleTableIdentifier = @"SimpleTableCell_iPad"; cell = (TableCell_Leads *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; } else{ static NSString *simpleTableIdentifier = @"TableCell_Leads"; cell = (TableCell_Leads *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; } if (cell == nil) { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell_iPad" owner:self options:nil]; cell = [nib objectAtIndex:0]; } else{ NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableCell_Leads" owner:self options:nil]; cell = [nib objectAtIndex:0]; } } cell.labTitle.text = [TitleArr objectAtIndex:indexPath.row]; cell.labCategory.text=[CategoryArr objectAtIndex:indexPath.row]; [cell.btnReadmore addTarget:self action:@selector(funReadmore:) forControlEvents:UIControlEventTouchUpInside]; return cell; } - (IBAction)funReadmore:(id)sender { [self.tableView beginUpdates]; readMore=TRUE; NSLog(@"READ MORE"); [self.tableView endUpdates]; } ```

Original source