当UItableViewcell突出显示时,UITableViewcell的子视图会消失,无论如何要修复它?

时间:2015-07-20 17:52:57

标签: ios objective-c uitableview

我正在使用RESIDEMENU,并尝试在LeftMenuViewController的单元格之间添加一行,这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 static NSString *cellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    cell.backgroundColor = [UIColor clearColor];
    cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:21];
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.highlightedTextColor = [UIColor lightGrayColor];
    cell.selectedBackgroundView = [[UIView alloc] init];
}

NSArray *titles = @[@"Home", @"Calendar", @"Profile", @"Settings", @"Log Out"];
NSArray *images = @[@"IconHome", @"IconCalendar", @"IconProfile", @"IconSettings", @"IconEmpty"];
cell.textLabel.text = titles[indexPath.row];
cell.imageView.image = [UIImage imageNamed:images[indexPath.row]];
UIView * lineView= [[UIView alloc]initWithFrame:CGRectMake(10, 0, cell.contentView.bounds.size.width, 3)];
lineView.backgroundColor=[UIColor redColor];

[cell.contentView addSubview:lineView];

return cell;
}

我最初可以看到这些线条,但是当我触摸任何一个单元格时,单元格会突出显示,并且这个单元格的线条会奇怪地消失。修复它的方法有哪些?

之前的

快照: enter image description here

单击一个单元格时的

快照: enter image description here

2 个答案:

答案 0 :(得分:2)

当选择或突出显示单元格时,UITableViewCell会更改所有子视图的背景颜色。

您有三种选择:

  1. 没有选择风格

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
  2. 子类UITableViewCell并覆盖Tableview单元格的setSelected:animated和/或setHighlighted:animated

  3. 将该行添加为图层

    CALayer* layer = [CALayer layer];
    layer.frame = CGRectMake(10, 0, cell.contentView.bounds.size.width, 3);
    layer.backgroundColor = [UIColor redColor].CGColor;
    [cell.contentView.layer  addSublayer:layer];
    

答案 1 :(得分:0)

另一种解决方法是覆盖setBackgroundColor:并公开类似的方法来更改其backgroundColor。

@interface

- (void)setPersistentBackgroundColor:(UIColor*)color;

@implementation

- (void)setPersistentBackgroundColor:(UIColor*)color
{
    super.backgroundColor = color;
}

- (void)setBackgroundColor:(UIColor *)color
{
    // [super setBackgroundColor:color];
    // prohibit from changing its background color.
}