2

我想要一个UITableViewwith customUITableViewCell和自定义分隔符。

据我所知,没有单独的“分隔符视图”,因此我必须在单元格本身中包含分隔符图像,无论是在单元格顶部还是在底部。

当我在选择后突出显示一个单元格时,我只能影响单元格自身的外观 - 因此,虽然可以在相关单元格中隐藏分隔符图像,但上方(或下方)单元格中的分隔符图像仍然可见

有没有(简单可靠)的方法来隐藏单元格突出显示的两条分隔线

更好的解释:

我想做的是以下内容:左图显示带有分隔符(粗黑线)的单元格(红线),右图显示选择的中间单元格 - 绿色选择图像隐藏了中间单元格的分隔符图像和顶部单元格的分隔符图像。

带隔板的电池 选定的单元格隐藏两个分隔符

我已经尝试将选择图像的框架设置为 -3 y 位置,但这无济于事,因为表格单元格视图是按从高到低的顺序绘制的......

4

4 回答 4

2

好吧,如果您想在选择单个单元格后操作两个(或更多)单元格,那么您必须向 tableView 询问这些单元格。
例如,如果所选单元格的 IndexPath 为 0,4,那么您必须向 tableView 询问 indexPath 0,3 处的单元格。

因此,在您的 didSelectRowAtIndexPath 方法中,您可以添加:


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *ip = [NSIndexPath indexPathForRow:indexPath.row - 1 inSection:indexPath.section];
    UITableViewCell *previousCell = [self tableView:tableView cellForRowAtIndexPath:ip];
}
然后,您可以隐藏该单元格中的行。

如果您使用它,请不要忘记检查新 indexPath 的边界。例如 indexPath 的行/节低于 0 或高于方法[tableView:numberOfSections][tableView:numberOfRowsInSection:]返回。

于 2013-06-12T16:45:50.057 回答
0

使用onselectedBackgroundView的属性:UITableViewCellcellForRowAtIndexPath

UIImageView *selBGView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourHighlightedImage.png"]];
 cell.selectedBackgroundView = selBGView;
于 2013-06-12T13:40:26.867 回答
0

我想向您推荐一种方法,但不确定它是否正确。highlightedImage尝试为分隔线图像视图设置空白或清晰图像。

于 2013-06-12T13:40:35.940 回答
0

好吧,过了一会儿回答我自己的问题:-)。

我找到了一个很好的方法:

我真正想做的是将有问题的单元格放在前面,然后在其中绘制一个稍大的选定状态图像,以便它也隐藏前一个单元格的分隔符。问题是无法保证哪个表格单元格在任何时候都位于其他单元格的前面。

解决方案非常简单:确保所选单元格位于所有其他单元格的前面!

所以我的自定义UITableViewCell现在做了以下事情:

-(void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
    [self showSelected];
}

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlightedanimated:animated];
    [self showSelected];
}

-(void)showSelected {
    if(self.selected || self.highlighted)
    {
        self.backgroundImage.hidden = false;  // show the selected image (2 pixels larger than the cell, origin (0, -2) -> paints over previous cell's separator)
        self.cellSeparator.hidden = true;     // hide my cell's separator image

        // make sure the cell is in front of all other cells!
        [self.superview bringSubviewToFront:self];
    }
    else
    {
        self.backgroundImage.hidden = true;    // hide the selected image again
        self.cellSeparator.hidden = false;     // show my cell's separator image
    }
}

等等,一切都很好。

于 2013-06-30T21:30:41.617 回答