所以我有一个自定义的表格视图单元格,我在它自己的xib中设计,包含一些标签和图像。
我正在尝试更新其中一个标签的背景颜色,具体取决于标签上的文字&给它圆润的边缘。
我正在使用以下代码尝试这个边缘,但是它不起作用,我不知道这个代码在滚动时更新每个单元格需要它在哪里。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CardCell";
CardTableViewCell *cell = (CardTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
//cell = [[CardTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CardCell"];
cell = [[[NSBundle mainBundle]loadNibNamed:@"CardCell" owner:self options:nil]objectAtIndex:0];
}
// Configure the cell...
NSManagedObject *card = [self.cards objectAtIndex:indexPath.row];
[cell.cardName setText:[card valueForKey:@"name"]];
[cell.type setText:[card valueForKey:@"attribute"]];
[cell.attack setText:[card valueForKey:@"attack"]];
[cell.defense setText:[card valueForKey:@"defense"]];
[cell.species setText:[card valueForKey:@"species"]];
[cell.starLevel setText:[card valueForKey:@"stars"]];
cell.type.layer.cornerRadius = cell.type.bounds.size.height / 8;
UIImage *cardImage = [UIImage imageWithData:[card valueForKey:@"thumb"]];
[cell.cardImage setImage:cardImage];
return (UITableViewCell *)cell;
}
正确显示文字和卡片图片。
答案 0 :(得分:3)
单元格在cellForRowAtIndexPath
中没有框架,因此未设置角半径。
在这种情况下,您应该在willDisplayCell
。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (yourCellShouldHaveRoundedCorners) {
cell.layer.cornerRadius = cell.bounds.size.height / 8;
}
}
标签的背景颜色应在cellForRowAtIndexPath
。
另外,我看到你在cellForRowAtIndexPath
中的单元格上设置了很多属性(即类型,攻击,防御等)。由于您已经有自定义单元格,因此最好在单元格上创建NSManagedObject
属性,并在此对象的setter上设置所有这些属性。
这样,你只需要调用cell.managedObject = card
,而setter就会设置其他属性。
这种方法更加面向模型,它可以为您节省一些代码重复。
答案 1 :(得分:0)
尝试使用固定数字 cell.type.bounds.size.height 不会在cellForRowAt中呈现正确的值
cell.type.layer.cornerRadius = 10 ;
cell.type.clipsToBounds = YES;
或者将其添加到单元格类
-(void)layoutSubviews
{
self.type.layer.cornerRadius = self.type.bounds.size.height / 8;
}
关于颜色,它将在 cellForRowAt 中完美地工作
if(yourLogic)
{
cell.type.backgroundColor = [UIColor redColor];
}
else
{
cell.type.backgroundColor = [UIColor greenColor];
}