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
奇怪的是,结果如下:。
有人可以解释一下吗?为什么该层不在所有单元格中绘制,而仅在每隔一个单元格中绘制?
编辑:这是我的 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;
I got a very simple UITableViewCell
subclass. 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
Bizarrely, here's the result:.
Can someone explain this?! Why doesn't the layer paint in all cells but only every second cell?
EDIT: Here's my tableView:cellForRowAtIndexPath:
method:
static NSString *reuseIdentifier = @"cellReuseIdentifier";
MyTableViewCell *cell = (MyTableViewCell *)[aTableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (cell == nil)
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease];
return cell;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用这个方法就达到了目的:
Using this method did the trick:
尽管与您的问题无关,但您应该将图层添加到 [self.contentView 图层]。否则,删除滑动等编辑功能将无法正确呈现。
Although not related to your question, you should add your layers to [self.contentView layer]. Otherwise editing functionality like delete-swipe will not render correctly.