UITableView : crash when adding a section footer view in empty section

Posted by Supernico on Stack Overflow See other posts from Stack Overflow or by Supernico
Published on 2009-12-12T15:12:42Z Indexed on 2010/04/09 8:53 UTC
Read the original article Hit count: 704

Filed under:
|

Hi everyone, This is the first time I ask a question here, but I have to say this site has been a tremendous help for me over the last couple months (iphone-dev-wise), and I thank you for that.

However, I didn't find any solution for this problem I'm having: I have a UITableView with 2 sections, and no rows when the app is launched for the first time. The user can fill the sections later on as he wishes (the content is not relevant here). The UITableView looks good when filled with rows, but looks pretty ugly when there is none (the 2 header sections are stuck together with no white space in between). That is why I'd like to add a nice "No row" view in between when there is no row.

I used viewForFooterInSection:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {

if(section == 0)
{
	if([firstSectionArray count] == 0)
		return 44;
	else 
		return 0;
}

return 0;

}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{

    if(section == 0)
    {
    	UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 50, 44)];
    	label.backgroundColor = [UIColor clearColor];
    	label.textColor = [UIColor colorWithWhite:0.6 alpha:1.0];
    	label.textAlignment = UITextAlignmentCenter;
    	label.lineBreakMode = UILineBreakModeWordWrap; 
    	label.numberOfLines = 0;
    	label.text = @"No row";
    	return [label autorelease];
    }

    return nil;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 2;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(section == 0)
    {
    	return [firstSectionArray count];
    }
    return [secondSectionArray count];
}

This works great : the footer view appears only when there is no row in section 0. But my app crashes when I enter edit mode and delete the last row in section 0:

Assertion failure in -[UIViewAnimation initWithView:indexPath:endRect:endAlpha:startFraction:endFraction:curve:animateFromCurrentPosition:shouldDeleteAfterAnimation:editing:] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Cell animation stop fraction must be greater than start fraction'

This does not happen when there are several rows in section 0. It only happens when there is only one row left.

Here's the code for edit mode:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    // If row is deleted, remove it from the list.
    if (editingStyle == UITableViewCellEditingStyleDelete) {
    	// Find the book at the deleted row, and remove from application delegate's array.

    	if(indexPath.section == 0)
    	{ [firstSectionArray removeObjectAtIndex:indexPath.row]; }
    	else 
    	{ [secondSectionArray removeObjectAtIndex:indexPath.row]; }

    	// Animate the deletion from the table.
    	[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
    						 withRowAnimation:UITableViewRowAnimationBottom];


    	[tableView reloadData];

    }
}

Does anyone have any idea why this is happening? Thanks

© Stack Overflow or respective owner

Related posts about iphone

Related posts about uitableview