在描述问题之前,我首先要指出这是与this question不同的问题。
问题
This screenshot在tableView:didSelectRowAtIndexPath:处设置了一个中断点,正如您在模拟器中看到的那样(图像的最右侧),所选单元格底部有一条单像素蓝线。这不是客户要求的设计,也不是这个应用程序的行为方式:即使在选择时也不应该有分隔符。
我如何到达 我最初使用自定义的UITableViewCell类和相应的nib(.xib)文件设计了这个表视图,并且没有选择的问题:分隔符被隐藏了。可以预见,由于视图层次结构中的所有开销,滚动速度很慢,所以我重新设计自定义单元格以使用Loren Brichter的fast scrolling solution。现在滚动速度要快得多,但我无法摆脱分离器的生命。
我尝试了什么
截至上方截图时......
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超级类的方法。
答案 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;
}