This is the general approach I would take.
Create a custom tableview cell and create a delegate for it with something like
-(void)actionButtonTappedInTableViewCell:(UITableViewCell*)cell;
Make your view controller the delegate for the tableview cell and when that action gets triggered do the following:
-(void)actionButtonTappedInTableViewCell:(UITableViewCell*)cell
{
NSIndexPath *oldIndexPath = [self.tableView indexPathForCell:cell];
NSIndexPath *pathToInsert = [NSIndexPath indexPathForRow:(oldIndexPath.row + 1) inSection:oldIndexPath.section];
[self.tableView beginUpdates];
//now insert with whatever animation you'd like
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:pathToInsert] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
}
Add the index paths of your "special" rows to arrays and in your cellForRow method check if this is a special row and set it up as such.