Ios 在cellForRowAtIndexPath中添加Gradientlayer
我有一个自定义单元格的表格视图。在每个单元格中,我添加一个标签作为子视图,并在标签中加载数据。我在我的cellForRowAtIndexPath中为if块中的每个单元格添加渐变,我们在其中检查单元格是否为零。工作正常。但是,我现在有一个额外的要求,问题从这里开始。我需要检查值,并为单元格中的特定标签应用渐变效果。这是我的密码Ios 在cellForRowAtIndexPath中添加Gradientlayer,ios,gradient,tableviewcell,cagradientlayer,Ios,Gradient,Tableviewcell,Cagradientlayer,我有一个自定义单元格的表格视图。在每个单元格中,我添加一个标签作为子视图,并在标签中加载数据。我在我的cellForRowAtIndexPath中为if块中的每个单元格添加渐变,我们在其中检查单元格是否为零。工作正常。但是,我现在有一个额外的要求,问题从这里开始。我需要检查值,并为单元格中的特定标签应用渐变效果。这是我的密码 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndex
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
HistoryCustomCell *cell = (HistoryCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[HistoryCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(cell.frame.origin.x + 2, cell.frame.origin.y, tableView.frame.size.width - 3, 44.0);
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:228.0/255.0 green:228.0/255.0 blue:228.0/255.0 alpha:1] CGColor], (id)[[UIColor colorWithRed:254.0/255.0 green:254.0/255.0 blue:254.0/255.0 alpha:1]CGColor], nil];
[cell.layer insertSublayer:gradient atIndex:0];
}
NSMutableDictionary *dictValue = [arrHistoryValues objectAtIndex:indexPath.row];
tempBestEverValue = [dictValue objectForKey:@"bestEverValue"];
tempBestValue = [dictValue objectForKey:@"bestValue"];
cell.cell1.text = [dictValue objectForKey:@"year"];
NSString *janValue = [dictValue objectForKey:@"janValue"];
if ([janValue isEqualToString:@"(null)"]) {
janValue = @"";
cell.cell2.text = [NSString stringWithFormat:@"%@",janValue];
}
else
{
janValue = [formatter stringFromNumber:[NSNumber numberWithInteger:[janValue intValue]]];
cell.cell2.text = [NSString stringWithFormat:@"$%@",janValue];
}
if ([[dictValue objectForKey:@"janBest"] isEqualToString:[dictValue objectForKey:@"janValue"]])
{
cell.cell2.font = [UIFont boldSystemFontOfSize:12.0];
}
if ([[dictValue objectForKey:@"janValue"]intValue] == [tempBestEverValue intValue])
{
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = cell.cell2.frame;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:165.0 green:239.0 blue:156.0 alpha:1.0] CGColor], (id)[[UIColor colorWithRed:140.0 green:203.0 blue:90.0 alpha:1.0] CGColor], nil];
[cell.layer insertSublayer:gradient atIndex:1];
}
else if ([[dictValue objectForKey:@"janValue"]intValue] == [tempBestValue intValue])
{
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = cell.cell2.frame;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:173.0 green:251.0 blue:173.0 alpha:1.0] CGColor], (id)[[UIColor colorWithRed:181.0 green:255.0 blue:181.0 alpha:1.0] CGColor], nil];
[cell.layer insertSublayer:gradient atIndex:1];
}
NSString *febValue = [dictValue objectForKey:@"febValue"];
if ([febValue isEqualToString:@"(null)"]) {
febValue = @"";
cell.cell3.text = [NSString stringWithFormat:@"%@",febValue];
}
else
{
febValue = [formatter stringFromNumber:[NSNumber numberWithInteger:[febValue intValue]]];
cell.cell3.text = [NSString stringWithFormat:@"$%@",febValue];
}
if ([[dictValue objectForKey:@"febValue"]intValue] == [tempBestEverValue intValue])
{
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = cell.cell3.frame;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:165.0/255.0 green:239.0/255.0 blue:156.0/255.0 alpha:1.0] CGColor], (id)[[UIColor colorWithRed:140.0/255.0 green:203.0/255.0 blue:90.0/255.0 alpha:1.0] CGColor], nil];
[cell.layer insertSublayer:gradient atIndex:1];
}
else if ([[dictValue objectForKey:@"febValue"]intValue] == [tempBestValue intValue])
{
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = cell.cell3.frame;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:173.0/255.0 green:251.0/255.0 blue:173.0/255.0 alpha:1.0] CGColor], (id)[[UIColor colorWithRed:181.0/255.0 green:255.0/255.0 blue:181.0/255.0 alpha:1.0] CGColor], nil];
[cell.layer insertSublayer:gradient atIndex:1];
}
if ([[dictValue objectForKey:@"febBest"] isEqualToString:[dictValue objectForKey:@"febValue"]])
{
cell.cell3.font = [UIFont boldSystemFontOfSize:12.0];
}
return cell;
}
现在,当我重新加载表格时,渐变没有正确应用。它随机选取细胞并应用梯度。如何在重新加载表格之前正确删除渐变。有好几天我的头都碎了。请帮忙。我认为您没有考虑到可重复使用的电池是如何工作的。在某一点上,您可以向给定的单元格添加渐变层:
[cell.layer insertSublayer:gradient-atIndex:1]代码>。如果将此单元格滚动出可见区域,则此单元格稍后将重新用于其他行,其中仍包含图层
尝试以下操作:每当您想要显示没有渐变背景的单元格时,请确保方法返回的单元格不包含渐变层。对于这两种情况,请使用两种不同的单元格标识符,例如@“CellIdentifier”
和@“GradientCellIdentifier”
,并仅在后一种情况下初始化单元格时添加渐变层。您已经有了自定义单元格(HistoryCustomCell
),请更好地使用它
与其在表委托中添加渐变层,不如将其添加到自定义类中,并使其公开可用。现在,在委托中,您可以执行以下操作:
cell.gradientLayer.opacity = 0;
如果不需要渐变,并且:
cell.gradientLayer.opacity = 1;
cell.gradientLayercolors = ...;
当需要渐变时,您需要指定颜色。这里,我一直希望单元格显示渐变。对于一些值,我需要应用一些其他的渐变颜色。这就是原因,我为所有单元格设置了[cell.layer insertSublayer:gradient atIndex:0],为需要显示不同渐变颜色的特定列单元格设置了[cell.layer insertSublayer:gradient atIndex:1]。所以所有的细胞都会一直可见。我一直想为整个细胞显示渐变色,然后我需要为特定值显示其他渐变色。这很好。自定义单元格可以为整个背景设置一个渐变,为背景的一部分设置另一个渐变,并使它们都可以公开使用。同样的过程也适用。