Iphone UITableViewCell使用隐藏分隔线高亮显示

Iphone UITableViewCell使用隐藏分隔线高亮显示,iphone,ios,uitableview,Iphone,Ios,Uitableview,我想要一个带有自定义UITableViewCells和自定义分隔符的UITableView 据我所知,没有单独的“分隔符视图”,因此我必须在单元格中包含分隔符图像,无论是在单元格顶部还是底部 当我在选择后高亮显示单元格时,我只能影响单元格自身的外观-因此,虽然可以在相关单元格中隐藏分隔符图像,但上方(或下方)单元格的分隔符图像仍然可见 有没有(简单可靠的)方法可以隐藏单元格高亮显示上的两条分隔线 更好的解释: 我想做的是:左图显示带分隔符(粗黑线)的单元格(红线),右图显示选定的中间单元格-绿色

我想要一个带有自定义
UITableViewCell
s和自定义分隔符的
UITableView

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

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

有没有(简单可靠的)方法可以隐藏单元格高亮显示上的两条分隔线

更好的解释:

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


我已经尝试将选择图像的帧设置为-3 y位置,但这没有帮助,因为表格单元格视图是按从高到低的顺序绘制的…

使用
cellforrowatinexpath
UITableViewCell
selectedBackgroundView
属性:

UIImageView *selBGView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourHighlightedImage.png"]];
 cell.selectedBackgroundView = selBGView;

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

如果要在选择单个单元格后操作两个(或更多)单元格,则必须向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的边界。例如一个行/节低于0或高于方法
[tableView:numberOfSections]
[tableView:numberOfRowsInSection:
返回。

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

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

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

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

因此,我的自定义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
    }
}

瞧,一切都很好。

不加解释的向下投票并没有真正的帮助……这不会有帮助,但我认为你在这里做的事情并不正确。最终,你会得到大量的粘合代码,效果可能会在一段时间后下降,事实上,它不需要太多的粘合代码——见下文。这种选择在iOS