I have a menu like so:

The normal (unselected) state for each cell is an image, the selected s
You could create a custom UITableViewCell, in which you add a UIButton with the size of the cell. Then you can easily make custom methods for the UIButton's TouchDown (hover) and TouchUpInside events, and set the background.
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
cellButton = [[UIButton alloc] initWithFrame:self.contentView.frame];
UIImage *cellBackgroundNormal = [UIImage imageNamed:@"cell_menu_normal"];
UIImageView *cellBackgroundView = [[UIImageView alloc] initWithImage:cellBackgroundNormal];
self.backgroundView = cellBackgroundView;
[cellButton addTarget:self action:@selector(hoverCell) forControlEvents:UIControlEventTouchDown];
[cellButton addTarget:self action:@selector(tapCell) forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
- (void)hoverCell
{
UIImage *cellBackgroundHover = [UIImage imageNamed:@"cell_menu_third_image"];
UIImageView *cellBackgroundHoverView = [[UIImageView alloc] initWithImage:cellBackgroundHover];
self.backgroundView = cellBackgroundHoverView;
}
- (void)tapCell
{
UIImage *cellBackgroundSelected = [UIImage imageNamed:@"cell_menu_selected"];
UIImageView *cellBackgroundSelectedView = [[UIImageView alloc] initWithImage:cellBackgroundSelected];
self.backgroundView = cellBackgroundSelectedView;
}