拖动重新排序时自定义UITableViewCell损坏

时间:2012-01-05 18:56:46

标签: iphone ios uitableview drag

我有一个自定义的UITableView子类,它将分隔符行作为子视图插入,如下所示:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        CGRect frame = [self bounds];

        frame.origin.y = CGRectGetMaxY(frame) - 1;
        frame.size.height = 1;

        UIView *separator = [[[UIView alloc] initWithFrame:frame] autorelease];

        [separator setBackgroundColor:[UIColor whiteColor]];
        [separator setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin];

        [self addSubview:separator];
    }
    return self;
}

这在我的细胞下划出了一条很好的线条。但是,当tableview处于编辑模式并且我拖动以重新排序单元格时,此子视图会消失!

其他一切看起来都是一样的,并且在拖动时单元格的不透明度会降低,但为什么会删除此子视图?

2 个答案:

答案 0 :(得分:1)

覆盖drawRect的工作原理:

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]);
    CGContextFillRect(context, CGRectMake(0, CGRectGetMaxY(rect)-.5, CGRectGetWidth(rect), .5));
    CGContextFillRect(context, CGRectMake(0, 0, CGRectGetWidth(rect), .5));
    CGContextRestoreGState(context);
}

答案 1 :(得分:-1)

不使用分隔线作为子视图,而是使用表视图附带的默认分隔线,并通过单元格的backgroundView图层更改borderColor。

cell.backgroundView.layer.borderColor = [UIColor blueColor];
显然需要

#import <QuartzCore/QuartzCore.h>

此外,如果您使用的是分组表视图,请确保匹配外部边框:

tableView.separatorColor = [UIColor blueColor];

再次确保分隔符行:)(所以不要将tableView separatorStyle属性设置为none:tableView.separatorStyle = UITableViewCellSeparatorStyleNone