I thought my table was fine until I changed the backgrounds to be a bit transparent, which showed the previous cells under the new selected cells. This is the code in my tableView:cellForRowAtIndexPath: method. I took out the redundant label, which is all the same as timeLabel .
static NSString* cellIdentifer = @"Cell"; UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifer]; if (!cell) { cell= [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: cellIdentifer]; } int offset = 5; int rowHeight = 120; UIView* cellView = [[UIView alloc] initWithFrame: CGRectMake(offset, offset, 320 - offset * 2, rowHeight - offset * 2)]; cellView.backgroundColor = indexPath.row % 2 == 0 ? [UIColor colorWithWhite: 1.0 alpha: .8 ] : [UIColor colorWithWhite: .3 alpha: .8]; int padding = 5; int x1 = 5; int x2 = CGRectGetWidth(cellView.frame) / 3; int x3 = x2 * 2; int y1 = 5; int y2 = CGRectGetHeight(cellView.frame) / 2 + padding; int width = CGRectGetWidth(cellView.frame) / 3 - padding; int sHeight = CGRectGetHeight(cellView.frame) / 2 - padding; int bHeight = CGRectGetHeight(cellView.frame) - padding; CGRect cell1 = CGRectMake(x1, y1, width, sHeight); int row = indexPath.row;

Chris source share