[ios] UITableViewセルが選択された色ですか?



Answers

カスタムセルは必要ありません。 セルの選択した色のみを変更したい場合は、これを行うことができます:

目標-C:

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor redColor];
[cell setSelectedBackgroundView:bgColorView];

迅速:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.redColor()
cell.selectedBackgroundView = bgColorView

スイフト3:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.red
cell.selectedBackgroundView = bgColorView

編集:ARC用に更新されました

編集:スウィフト3を追加

Question

カスタムUITableViewCellを作成しました。 テーブルビューにはデータが正しく表示されています。 私が抱えているのは、ユーザーがtableviewのセルに触れると、セルの選択を強調表示するデフォルトの[青色]値以外のセルの背景色を表示したい場合です。 私はこのコードを使用しますが、何も起こりません:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];



[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

上記の行を使用して選択効果を使用していることを確認してください




UITableViewCellsetSelectedをオーバーライドすることもUITableViewCellます。

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}



カスタムTableViewCellを使用している場合は、awakeFromNibをオーバーライドすることもできます。

override func awakeFromNib() {
    super.awakeFromNib()

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}



Swift 3.0拡張機能

extension UITableViewCell {
    var selectionColor: UIColor {
        set {
            let view = UIView()
            view.backgroundColor = newValue
            self.selectedBackgroundView = view
        }
        get {
            return self.selectedBackgroundView?.backgroundColor ?? UIColor.clear
        }
    }
}

cell.selectionColor = UIColor.FormaCar.blue




Swift 4では、テーブルセルの背景色をグローバルに設定することもできます( hereから取得しhere )。

let backgroundColorView = UIView()
backgroundColorView.backgroundColor = UIColor.red
UITableViewCell.appearance().selectedBackgroundView = backgroundColorView



-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIView *view = [[UIView alloc] init];
    [view setBackgroundColor:[UIColor redColor]];
    [cell setSelectedBackgroundView:view];
}

このメソッドでは、選択した背景ビューを設定する必要があります。




UITableView選択されたセルのカスタムカラーごとに、Maciej Swicのanswerごとの素晴らしい解決策

それを追加するだけで、あなたはSwicのanswerをCell設定で宣言します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

また、システムカラーの代わりにカスタムカラールックにRGB値を使用することもできます。 私のコードでこれは私がそれを達成した方法です:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

} 

 static NSString *CellIdentifier = @"YourCustomCellName";
 MakanTableCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

if (cell == nil) {

cell = [[[NSBundle mainBundle]loadNibNamed:@"YourCustomCellClassName" owner:self options:nil]objectAtIndex:0];
                    } 

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:255.0/256.0 green:239.0/256.0 blue:49.0/256.0 alpha:1];
bgColorView.layer.cornerRadius = 7;
bgColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView:bgColorView];


return cell;

}

それがあなたのためにも働くかどうか私に教えてください。 あなたは、選択されたセルのコーナーの効果のためにcornerRadius番号を混乱させることができます。




カスタムセルクラスの場合。 ただオーバーライドする:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state

    if (selected) {
        [self setBackgroundColor: CELL_SELECTED_BG_COLOR];
        [self.contentView setBackgroundColor: CELL_SELECTED_BG_COLOR];
    }else{
        [self setBackgroundColor: [UIColor clearColor]];
        [self.contentView setBackgroundColor: [UIColor clearColor]];
    }
}



表の表示セル選択の背景色は、ストーリーボードを介して設定できます。




Swift 3.0用:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)

    cell.contentView.backgroundColor = UIColor.red
}



Maciejの答えを使って、すべてのセルの背景を追加するには:

for (int section = 0; section < [self.tableView numberOfSections]; section++) {
        for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
            NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
            UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];

            //stuff to do with each cell
            UIView *bgColorView = [[UIView alloc] init];
            bgColorView.backgroundColor = [UIColor redColor];
            [cell setSelectedBackgroundView:bgColorView];
        }
    } 



私はiOS 9.3を使用していて、ストーリーボードを通して色を設定したり、 cell.selectionStyle設定してもcell.selectionStyleしませんでしたが、以下のコードが機能しました:

UIView *customColorView = [[UIView alloc] init];
customColorView.backgroundColor = [UIColor colorWithRed:55 / 255.0 
                                                  green:141 / 255.0 
                                                   blue:211 / 255.0 
                                                  alpha:1.0];
cell.selectedBackgroundView = customColorView;

return cell;

私はこの解決策をhere見つけましhere




Swift 3:私にとっては、 cellForRowAtIndexPath:メソッドに入れたときにうまくいった

let view = UIView()
view.backgroundColor = UIColor.red
cell.selectedBackgroundView = view



[cell setClipsToBounds:YES]; グループスタイルのセル




Related