我正在尝试在自定义UITableViewCells中实现一些绘图。为此,我已将自定义UIView子类添加到我的单元格,并在自定义UIView子类的drawRect方法中实现了绘图。
这是我的方法:
我有一个带有自定义UITableViewCells的UITableView。 我已经将UITableViewCell子类化,但设计直接在我的故事板中实现。单元格的内容是标准元素(UILabels& UIImageViews)和一个自定义uiview子类。
我已经使用约束和安排在故事板中设置了所有内容。自动布局。
自定义uiview子类在drawRect方法中包含绘图代码。
必须根据每个UITableViewCell的一些参数自定义图形。 问题是,自定义UIView子类的正确方法是什么。
目前,我得到的是一个黑色的立方体,我看不到任何图画......背景颜色不会改变,文字也不会出现(绘图)。
编辑: 在cellForRowAtIndexPath中,我使用其initWithText创建自定义UIView:andColor:方法:
- (instancetype)initWithText:(NSString *)text andColor:(UIColor *)color
{
NSParameterAssert(text);
self = [super init];
if (self)
{
self.text = text;
[self setBackgroundColor:color];
}
return self;
}
-(void)setBackgroundColor:(UIColor *)backgroundColor
{
self.circleColor = backgroundColor;
[super setBackgroundColor:[UIColor clearColor]];
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
[self.circleColor setFill];
CGContextAddArc(context, CGRectGetMidX(rect), CGRectGetMidY(rect),
CGRectGetWidth(rect)/2, 0, 2*M_PI, YES);
CGContextFillPath(context);
}
- (void)drawSubtractedText:(NSString *)text inRect:(CGRect)rect
inContext:(CGContextRef)context
{
CGContextSaveGState(context);
CGContextSetBlendMode(context, kCGBlendModeDestinationOut);
CGFloat pointSize = 8;
UIFont *font = [UIFont boldSystemFontOfSize:pointSize];
CGContextTranslateCTM(context, 0,
(CGRectGetMidY(rect) - (font.lineHeight/2)));
CGRect frame = CGRectMake(0, 0, CGRectGetWidth(rect), font.lineHeight);
UILabel *label = [[UILabel alloc] initWithFrame:frame];
label.font = font;
label.text = text;
label.textColor = [UIColor redColor];
label.textAlignment = NSTextAlignmentCenter;
label.backgroundColor = [UIColor blueColor];
[label.layer drawInContext:context];
CGContextRestoreGState(context);
}
答案 0 :(得分:0)
您可以在故事板中为标签和图像指定标签。使用这些标记并获取子视图的引用,如下所示
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//some code
UILabel* cellDate = (UILabel *)[cellRef viewWithTag:1]
UIImageView* imageView = (UIImageView *)[cellRef viewWithTag:2]
//some code
}
答案 1 :(得分:0)
你在做什么是错的。您已在故事板UIView
中添加了UITableviewCell
引用。您再次在UIView
方法中为同一个自定义cellForRowIndexpath
类创建对象。你可以做的是,从故事板和UIView
方法中删除cellforrowindexpath
,如下所示。
CustomUIClass * c = [[CustomUIClass alloc] init];
c.frame = CGRectMake(X, Y, Width, height);
[cell.contentView addSubview:c];
此处添加您自己的帧值以准备CGRect
。