我有一个非常简单的视图控制器,只有UITableView
和UIButton
,点按按钮时,我想将所有UITableViewCells
的背景颜色更改为绿色,假设有一些细胞不可见,我用这个循环来完成我需要的东西:
- (IBAction)click:(id)sender {
for (int row = 0; row < [self.tableView numberOfRowsInSection:0]; row++) {
NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:0];
UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];
cell.backgroundColor = [UIColor greenColor];
}
}
问题在于UITableView
的默认行为,它实际上并不会创建不可见的单元格,直到它们可见!所以上面的代码不幸仅适用于可见细胞。问题是,如何在按钮点击时更改所有单元格的颜色?
P.S。这个非常简单的项目样本can be downloaded here。
提前谢谢。
答案 0 :(得分:4)
你不必这样做
只需使用变量来保存单元格的backgroundColor
UIColor cellColor;
然后当您更改颜色调用时
[tableView reloadData];
然后在
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = yourcell;
...
...
...
cell.backgroundColor = cellColor;
return cell ;
}
已经完成了!
<强>更新强>
抱歉,试试这个- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = yourcell;
...
...
...
cell.textLabel.backgroundColor = [UIColor clearColor];
UIView* bgview = [[UIView alloc] initWithFrame:cell.bounds];
bgview.backgroundColor = [UIColor greenColor];
[cell setBackgroundView:bgview];
return cell ;
}
答案 1 :(得分:2)
您想使用UITableViewDataSource来处理这个问题,所以只需在.h文件中创建一个UIColor变量,更改操作中的变量并告诉tableView重新加载它的数据,然后在数据源响应中设置颜色
MyTableViewController.h
@interface MyTableViewController : UITableViewController {
UIColor *cellColor;
}
-(IBAction)click:(id)sender;
MyTableViewController.m
@implementation MyTableViewController
-(IBAction)click:(id)sender{
cellColor = [UIColor redColor];
[self.tableView reloadData];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Setup your cell
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
cell.accessoryView.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = cellColor;
return cell;
}
@end
答案 2 :(得分:1)
将颜色存储为保留的property
,并在单击按钮时进行设置。
@property (retain, nonatomic) UIColor *cellColor;
....
- (IBAction)click:(id)sender {
self.cellColor = [UIColor greenColor];
for (int row = 0; row < [self.tableView numberOfRowsInSection:0]; row++) {
NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:0];
UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];
cell.contentView.backgroundColor = self.cellColor;
cell.textLabel.backgroundColor = self.cellColor;
}
}
您也可以选择重新加载整个tableView
,而不是遍历单元格。
- (IBAction)click:(id)sender {
self.cellColor = [UIColor greenColor];
[self.tableView reloadData];
}
然后在tableView:cellForRowAtIndexPath:
检查property
是否已设置并设置contentView
和textLabel
背景颜色。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
if (self.cellColor) {
cell.contentView.backgroundColor = self.cellColor;
cell.textLabel.backgroundColor = self.cellColor;
}
return cell;
}
答案 3 :(得分:1)
你在评论保罗亨特的答案中说“不会给整个细胞着色”。
尝试设置backgroundView:
cell.backgroundView = [[[UIView alloc] init] autorelease];
cell.backgroundView.backgroundColor = self.cellColor;
答案 4 :(得分:1)
在您的代码中只需更改此方法
可能这是你的临时解决方案
-(IBAction)click:(id)sender
{
self.tableView.backgroundColor=[UIColor greenColor];
}
答案 5 :(得分:0)
此链接可以解决您的问题,它有类似您的问题 Setting background color of a table view cell on iPhone