// A
+(UIView*)flashAt:(CGRect)r in:(UIView*)parent color:(UIColor*)color;
{
	float duration = 0.5;
	UIView *flash = [[[UIView alloc] initWithFrame:r] autorelease];
	flash.backgroundColor = color;
	[parent addSubview:flash];
	[[flash invokeAfter:duration+0.1] removeFromSuperview];
		
	[UIView beginAnimations:@"SPFlash" context:NULL];
	[UIView setAnimationDuration:duration];
	flash.alpha = 0.0;
	[UIView commitAnimations];
	return flash;
}

// B
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	
	// Force the animation to happen by calling this method again after a small
	// delay - see http://blog.instapaper.com/post/53568356
	[[self nextRunloop] delayedTableViewDidSelectRowAtIndexPath: indexPath];
}

// C
[[tableView invokeAfter:0.15] selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
[[tableView invokeAfter:0.30] deselectRowAtIndexPath:indexPath animated:YES];
[[tableView invokeAfter:0.45] selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];