3

私はとだけを持っている非常に単純なビューコントローラーを持っています、ボタンをタップ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。実際には、表示されるまで非表示のセルは作成されません。したがって、上記のコードは、残念ながら、表示されているセルでのみ機能します。問題は、ボタンタップですべてのセルの色を変更するにはどうすればよいですか?

psこの非常に単純なプロジェクトサンプルはここからダウンロードできます

前もって感謝します。

4

6 に答える 6

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 ;
}
于 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

コードでこのメソッドを変更するだけです

これはあなたの一時的な解決策かもしれません

-(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を設定します。contentViewtextLabel

- (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 に答える
1

あなたは、ポール・ハンターの答えに対するコメントで、「細胞全体を着色しない」と述べています。

backgroundView を設定してみてください:

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

このリンクはあなたの問題を解決することができます.iPhoneのテーブルビューセルの背景色の設定のような同様の問題が あります

于 2012-04-21T09:52:53.707 に答える