Iphone UITableViewCellSeparatorStyleNone在UITableView中选择时不隐藏蓝色分隔线

Iphone UITableViewCellSeparatorStyleNone在UITableView中选择时不隐藏蓝色分隔线,iphone,objective-c,cocoa-touch,uitableview,separator,Iphone,Objective C,Cocoa Touch,Uitableview,Separator,在描述问题之前,让我首先指出,这是一个不同于其他问题的问题 问题 在tableView:didSelectRowAtIndexPath:中设置了一个中断,正如您在模拟器(图像最右侧)中看到的,在所选单元格的底部有一条单像素蓝线。这不是客户端要求的设计,也不是这个应用程序过去的行为:应该没有分隔符,即使在选择时也是如此 我是如何来到这里的 我最初使用自定义UITableViewCell类和相应的nib(.xib)文件设计了这个表视图,并且在选择上没有问题:分隔符按照需要隐藏。可以预见的是,由于视图

在描述问题之前,让我首先指出,这是一个不同于其他问题的问题

问题

在tableView:didSelectRowAtIndexPath:中设置了一个中断,正如您在模拟器(图像最右侧)中看到的,在所选单元格的底部有一条单像素蓝线。这不是客户端要求的设计,也不是这个应用程序过去的行为:应该没有分隔符,即使在选择时也是如此

我是如何来到这里的 我最初使用自定义UITableViewCell类和相应的nib(.xib)文件设计了这个表视图,并且在选择上没有问题:分隔符按照需要隐藏。可以预见的是,由于视图层次结构的所有开销,滚动速度很慢,所以我修改了自定义单元格以使用Loren Brichter的。现在滚动速度快得多,但我无法摆脱我的生活分隔符

我尝试过的

在上面截图的时候

  • 表视图在IB中有“分隔符[无]”
  • 包含表视图的UIViewController在viewDid Load中有以下行:
    self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone
正如您在屏幕截图中所看到的,我插入了一些未使用的行,以证明separatorStyle是根据需要设置的。其他测试确认tableView和self.tableView是同一断点上的等效指针

我还尝试将tableView.separatorColor设置为黑色和透明,所有结果都是一样的:单元格在做出选择之前看起来是正确的


曼朱纳斯:这是我用来根据手机是否被触摸来绘制背景的代码。在屏幕截图中设置动画时,您可以看到细微差别

if(self.highlighted) {
    textColor = [UIColor blackColor];
    UIImage *bg = [UIImage imageNamed:@"image-cell-background_highlighted.png"];
    [bg drawAtPoint:CGPointMake(0.0, 1.0)];
}
else {
    UIImage *bg = [UIImage imageNamed:@"image-cell-background.png"];
    [bg drawAtPoint:CGPointMake(0.0, 0.0)];
}
drawContentView:
中的UIImageCell.m中调用它,该方法继承自Brichter先生的ABTableViewCell超类。

请尝试以下操作:
[单元格设置选择样式:UITableViewCellSelectionStyleNone]

 // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {

        static NSString *CellIdentifier = NSLocalizedString(@"Cell",@"");
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (nil == cell)
        {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        }   
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        return cell;
    }
试试这个:
[单元格设置选择样式:UITableViewCellSelectionStyleNone]

 // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    {

        static NSString *CellIdentifier = NSLocalizedString(@"Cell",@"");
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (nil == cell)
        {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        }   
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        return cell;
    }
克里斯

深入研究ABTableViewCell,我发现:

- (void)setFrame:(CGRect)f
{
 [super setFrame:f];
 CGRect b = [self bounds];
 b.size.height -= 1; // leave room for the seperator line
 [contentView setFrame:b];
}
由于单元的高度比实际单元短一个像素,因此当选择单元时,该像素线将在选择颜色的颜色中溢出。它看起来像是分隔符,但实际上是选择颜色

要进行测试,请尝试将上面的线条缩短两个像素或更多,以查看发生了什么

更新:

通过对FastScrollingExample项目的
-rootViewController
进行此更改:

- (void)viewDidLoad
{
 self.title = @"Fast Scrolling Example";
 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [super viewDidLoad];
}
并指出:

// if(self.selected)
// {
//  backgroundColor = [UIColor clearColor];
//  textColor = [UIColor whiteColor];
// }
// 
-drawContentView
中,为了模拟如果没有显示选择颜色会发生的情况,我得到如下屏幕截图:

看起来眼熟吗

你会怎么处理这件事?如果不需要选择单元格,请禁用单元格选择。否则,如果要选择单元格,则应将矩形放大,以便在
-drawcontrect
中使用自己的选择颜色绘制时,默认选择颜色不会显示出来

深入研究ABTableViewCell,我发现:

- (void)setFrame:(CGRect)f
{
 [super setFrame:f];
 CGRect b = [self bounds];
 b.size.height -= 1; // leave room for the seperator line
 [contentView setFrame:b];
}
由于单元的高度比实际单元短一个像素,因此当选择单元时,该像素线将在选择颜色的颜色中溢出。它看起来像是分隔符,但实际上是选择颜色

要进行测试,请尝试将上面的线条缩短两个像素或更多,以查看发生了什么

更新:

通过对FastScrollingExample项目的
-rootViewController
进行此更改:

- (void)viewDidLoad
{
 self.title = @"Fast Scrolling Example";
 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [super viewDidLoad];
}
并指出:

// if(self.selected)
// {
//  backgroundColor = [UIColor clearColor];
//  textColor = [UIColor whiteColor];
// }
// 
-drawContentView
中,为了模拟如果没有显示选择颜色会发生的情况,我得到如下屏幕截图:

看起来眼熟吗


你会怎么处理这件事?如果不需要选择单元格,请禁用单元格选择。否则,如果要选择单元格,则应将rect变大,以便在
-drawcontrect

UITableViewCellSelectionStyleNone中使用自己的选择颜色进行绘制时,默认选择颜色不会显示出来。这样做的副作用是,使“我的图形代码”中的if语句永远不会计算为“是”。(请参阅上面的附加代码块。)虽然我更喜欢这里的无阻尼图形,但您的解决方案至少以UITableViewCellSelectionStyleGray的形式提供了一个不太显眼的选择覆盖。谢谢你,曼朱纳!UITableViewCellSelectionStyleNone有一个副作用,就是使我的图形代码中的if语句永远不会计算为YES。(请参阅上面的附加代码块。)虽然我更喜欢这里的无阻尼图形,但您的解决方案至少以UITableViewCellSelectionStyleGray的形式提供了一个不太显眼的选择覆盖。谢谢你,曼朱纳!啊,谢谢你,马布德!我期待着我或苹果的原因,但它是在ABTableViewCell。评论这句话就成功了<代码>//b.size.height-=1;//为分隔线留出空间
啊,谢谢你,Mahboud!我期待着我或苹果的原因,但它是在ABTableViewCell。评论这句话就成功了<代码>//b.size.height-=1;//为分隔线留出空间