UITableViewCell具有半透明选定背景

时间:2012-03-25 11:10:48

标签: iphone ios uitableview

我需要在选中单元格时隐藏单元格的正常(未选中 - cell.backgroundView)图像,并在未选中单元格时显示它。

tableview的工作方式是普通视图(cell.backgroundView)始终存在,当选择单元格时,它会将所选图像(cell.selectedBackgroundView)设置为视图并置于普通视图之上。

问题是当所选细胞是半透明的并且正常细胞总是在其下面可见时。 我在我的(自定义)UITableViewCell的2个视图中创建了我在视图控制器中加载的视图:

-(void)tableView:(UITableView *)tableView 
 willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"XYCell"]];
    cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"XYCellSelected"]];
}

我清除了所需位置的颜色,但我无法按照我的意愿使用它。 由于我选择的图像(cell.selectedBackgroundView)是半透明的,因此仍然可以在其下方看到cell.backgroundView。 我怎么能让它消失?

2 个答案:

答案 0 :(得分:1)

一般来说,如果你想要一个自定义单元格,你应该实现自己的uitableviewcell。

在你的情况下,看看

- (void)setSelected:(BOOL)selected animated:(BOOL)animated;

帮助您的代码示例:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
   [super setSelected:selected animated:animated];
   //your own backgroundview when selected
   self.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"selectedBck.png"]];
   if (selected){
        // edit the cell's view when it's selected
        self.backgroundView = nil;
    } 
    else {
       // edit the cell's view when it isn't selected
    }
}

答案 1 :(得分:1)

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.highlightIndexPath = indexPath;    // for iOS6
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.backgroundView.hidden = YES;
}

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (indexPath.row == NSNotFound) {
        // for iOS6
        cell = [tableView cellForRowAtIndexPath:self.highlightIndexPath];
    }
    cell.backgroundView.hidden = NO;
}