自定义UITableViewCell突出显示的样式

时间:2014-08-13 02:19:09

标签: ios uitableview

我对如何自定义UITableViewCell突出显示的样式感到困惑,不仅是突出显示的单元格背景颜色,还包括其子视图的框架(图像视图)?

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated

方法对我不起作用。如果我只更改单元格的突出显示颜色,则效果非常好。但它不能改变细胞的子视图框架。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

最好只使用委托协议:

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath
// and
- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath

然后只需通过UITableViewCell *cell = [tableView cellforRowAtIndexPath:indexPath];直接调整您的UITableViewCell。

答案 1 :(得分:1)

您可以按照以下方式执行此操作

下面是它的示例代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *strIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:strIdentifier];

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:strIdentifier];
    }
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    UIImageView *imgv = [[UIImageView alloc] initWithFrame:CGRectMake(278, 2, 40, 40)];
    [imgv setBackgroundColor:[UIColor grayColor]];
    imgv.tag = 100 + indexPath.row;
    [cell.contentView addSubview:imgv];

    [cell.textLabel setText:[NSString stringWithFormat:@"Cell: %d",indexPath.row]];
    [cell.detailTextLabel setText:[NSString stringWithFormat:@"%03d - %03d",indexPath.section, indexPath.row]];

    return cell;
}

-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell.textLabel setBackgroundColor:[UIColor orangeColor]];

    //set the frame of subview on highlight
    UIImageView *imgv = (UIImageView*)[cell.contentView viewWithTag:100+indexPath.row];
    [imgv setBackgroundColor:[UIColor orangeColor]];
    [imgv setFrame:CGRectMake(238, 2, 80, 40)];
}

-(void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell.textLabel setBackgroundColor:[UIColor clearColor]];

    //now reset the frame of subview on Unhighlight
    UIImageView *imgv = (UIImageView*)[cell.contentView viewWithTag:100+indexPath.row];
    [imgv setBackgroundColor:[UIColor grayColor]];
    [imgv setFrame:CGRectMake(278, 2, 40, 40)];
}