UITableView和CALayer混淆

时间:2011-04-08 14:35:03

标签: iphone objective-c uitableview calayer

我有一个非常简单的UITableViewCell子类。 MyTableViewCell.h

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>


@interface MyTableViewCell : UITableViewCell {
    CALayer *backgroundLayer;
}

@end

MyTableViewCell.m

#import "MyTableViewCell.h"
#import <QuartzCore/QuartzCore.h>


@implementation MyTableViewCell


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        backgroundLayer = [[CALayer alloc] init];
        [backgroundLayer setBackgroundColor:[[UIColor yellowColor] CGColor]];
        [[self layer] addSublayer:backgroundLayer];
    }
    return self;
}


- (void)layoutSublayersOfLayer:(CALayer *)layer {
    [backgroundLayer setFrame:[layer frame]];
    [super layoutSublayersOfLayer:layer];
}


- (void)dealloc {
    [backgroundLayer release];
    [super dealloc];
}


@end

奇怪的是,结果如下:enter image description here

有人能解释一下吗?!为什么图层不是在所有单元格中绘制,而是仅在每隔一个单元格中绘制一次?

编辑:这是我的tableView:cellForRowAtIndexPath:方法:

static NSString *reuseIdentifier = @"cellReuseIdentifier";

MyTableViewCell *cell = (MyTableViewCell *)[aTableView dequeueReusableCellWithIdentifier:reuseIdentifier];

if (cell == nil)
    cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease];

return cell;

2 个答案:

答案 0 :(得分:0)

使用这种方法可以解决问题:

- (void)layoutSublayersOfLayer:(CALayer *)layer {
    CGRect frame = [layer frame];
    frame.origin = CGPointZero;
    [backgroundLayer setFrame:frame];
    [super layoutSublayersOfLayer:layer];
}

答案 1 :(得分:0)

虽然与您的问题无关,但您应该将图层添加到[self.contentView图层]。否则,删除 - 滑动等编辑功能将无法正确呈现。