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

时间:2010-05-10 02:18:39

标签: iphone objective-c cocoa-touch uitableview separator

在描述问题之前,我首先要指出这是与this question不同的问题。

问题

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

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

我尝试了什么

截至上方截图时......

  • 表格视图在IB中有“分隔符[无]”。
  • 包含表视图的UIViewController在viewDid中有此行加载:self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

正如您在屏幕截图中看到的,我插入了一些未使用的行来证明separatorStyle是根据需要设置的。其他测试证实tableView和self.tableView是同一断点处的等效指针。

我也尝试将tableView.separatorColor设置为黑色并清除,所有结果都相同:单元格看起来正确,直到做出选择。


Manjunath:这是我用来绘制替代背景的代码,具体取决于细胞是否被触摸。你可以看到差异 - 在屏幕截图中动画时不那么微妙。

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超级类的方法。

2 个答案:

答案 0 :(得分:2)

克里斯,

深入研究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中模仿如果您没有显示选择颜色会发生什么,然后我得到这样的屏幕截图:

alt text http://files.me.com/mahboud/7k656q

看起来很熟悉?

你怎么能绕过这个?如果您不需要选择单元格,则禁用单元格选择。否则,如果您正在选择单元格,那么您应该使矩形更大,以便在-drawConentRect中使用您自己的选择颜色绘制时,默认选择颜色不会显示。

答案 1 :(得分:1)

试试这个: [cell setSelectionStyle: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;
    }