我有一个变量可以跟踪需要着色的细胞数量。因此,如果该变量为3,那么前三个单元格backgroundcolor将会改变。我怎么能这样做?
我知道我需要在
中更新此内容- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
但是如何根据我的变量确保顶部单元格具有不同的背景颜色?
答案 0 :(得分:2)
indexPath
参数是您的起点。如果coloredCells
是一个包含要着色的单元格数的整数,那么您的方法将包含类似
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
// fetch or create the cell, first
UITableViewCell *cell = // ...
// then set it up
if(indexPath.row < self.coloredCells) {
cell.contentView.backgroundColor = [UIColor redColor];
} else {
cell.contentView.backgroundColor = [UIColor whiteColor];
}
// perform rest of cell setup
// ...
return cell;
}
现在,如果您调整coloredCells
的值,则需要通知表视图其某些视图已更改。最懒的方法是重新加载整个表:
// elsewhere...
self.coloredCells = 4;
[self.tableView reloadData];
或者您可以花一点力气重新加载具有彩色背景的细胞:
self.coloredCells = newColoredCount;
NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:newColoredCount];
for(int i = 0; i < newColoredCount; i++) {
[indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
}
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
答案 1 :(得分:0)
您将测试行号并相应地更改颜色。在cellForRowAtIndexPath中使用:
//having allocated or recycled a cell into myCell pointer above
//test for row and assign background color like so
if (indexPath.row < 3) {
myCell.contentView.backgroundColor = [UIColor greenColor];
} else {
myCell.contentView.backgroundColor = [UIColor redColor];
}
//continue configuring your cell
答案 2 :(得分:0)
您可以使用UITableViewDelegate的tableView:willDisplayCell:forRowAtIndexPath:来更改单元格的背景颜色等内容。在实际显示单元格之前,cellForRowAtIndexPath中所做的更改可能会丢失,因此通常最好在此方法中执行此操作。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row < numberOfColoredRows) {
cell.backgroundColor = [UIColor redColor];
}
}
从参考文献中对此方法的讨论:
表视图在使用之前将此消息发送到其委托 单元格绘制一行,从而允许委托自定义 显示之前的单元格对象。这个方法给代表一个 有可能覆盖表格前面设置的基于状态的属性 视图,例如选择和背景颜色。代表之后 返回时,表视图仅设置alpha和frame属性,以及 然后只有当它们滑入或滑出时动画行。
答案 3 :(得分:0)
不,您不必更新tableView:cellForRowRowAtIndexPath:
委托方法。你所要做的就是:
[self.tableView cellForRowAtIndexPath:indexPath].backgroundColor = desiredUIColor;
请注意,从tableView:cellForRowAtIndexPath:
类型调用id<UITableViewDataSource>
与从类型cellForRowAtIndexPath:
调用UITableView
不同。前者调用委托方法(永远不应该直接调用),后者返回索引路径的当前单元格而不重新计算单元格。
如果表视图中只有一个部分,则计算顶部 n 单元格的算法很简单。如果你的“要跟踪需要着色的细胞数量的变量”是(NSUInteger)numberOfHighlightedCells
,那么这是一个可以运行的简单循环代码:
NSUInteger i;
for (i = 0; i < numberOfHighlightedCells; i++) {
[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]].backgroundColor = desiredUIColor;
}
但是,如果表中有多个部分,则可能需要对索引路径进行一些非常复杂的计算。