3

我有一个非常简单的视图控制器,只有 aUITableView和 a 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,它实际上并没有创建不可见的单元格,直到它们可见!所以不幸的是,上面的代码只适用于可见单元格。问题是,如何更改按钮点击上所有单元格的颜色?

ps 这个非常简单的项目示例可以在这里下载

先感谢您。

4

6 回答 6

4

你不必这样做

只需使用一个变量来保存单元格的背景颜色

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 ;
}
于 2012-04-18T16:08:43.130 回答
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
于 2012-04-18T16:21:01.197 回答
1

您在对 Paul Hunter 的回答的评论中声明“不会为整个细胞着色”。

尝试设置背景视图:

cell.backgroundView = [[[UIView alloc] init] autorelease]; 
cell.backgroundView.backgroundColor = self.cellColor;
于 2012-04-18T17:35:01.877 回答
1

在您的代码中只需更改此方法

可能这是你的临时解决方案

-(IBAction)click:(id)sender 
{

    self.tableView.backgroundColor=[UIColor greenColor];

}
于 2012-04-19T11:45:43.727 回答
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;
}
于 2012-04-18T16:17:15.867 回答
0

这个链接可以解决你的问题,它有类似的问题,比如你 在 iPhone 上设置表格视图单元格的背景颜色

于 2012-04-21T09:52:53.707 回答