UITableViewセル選択色?


319

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

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

回答:


365

私はあなたが正しい軌道に乗っていたと思いますが、クラス定義によるとselectedBackgroundView

デフォルトは、プレーンスタイルテーブル(UITableViewStylePlain)のセルの場合はnilで、セクショングループテーブルUITableViewStyleGroupedの場合は非nilです。

したがって、プレーンスタイルのテーブルを使用している場合はUIView、目的の背景色を持つ新しいをalloc-initで割り当て、それをに割り当てる必要がありselectedBackgroundViewます。

または、次のように使用することもできます。

cell.selectionStyle = UITableViewCellSelectionStyleGray;

セルが選択されているときに必要なのが灰色の背景である場合。お役に立てれば。


1
このプロパティは、ビューに関連するものをビューに残したい場合は、ストーリーボードでも設定できます。
IIllIIll 2015年

1
スウィフト3バージョン:cell.selectionStyle = .gray //あなたはまた.none、.blueまたは.DEFAULTを使用することができます
セバスチャン・レミー

6
この回答はかなり古いです...新しいiOSバージョンで何か変更はありますか?プレーンスタイルのテーブルがあり、selectedBackgroundViewがnilではありません。興味深いことに、このビューのbackgroundColorを変更しても効果はありません。代わりに、新しいUIViewを目的のbackgroundColorに置き換えて機能させる必要があります。
ndreisg 2018年

あなたは私を完全に気が狂うことから救いました。どうもありがとう!
mrwheet

656

カスタムセルは必要ありません。セルの選択した色のみを変更したい場合は、次のようにできます。

Objective-C:

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

迅速:

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

47
これは機能しますが、グループ化されたUITableViewでは、丸い角が失われます。
David

1
@David cornerRadius = 7はグループ化されたテーブルビューのどこでも機能しますか?セルが中央にある場合はどうなりますか?これをテストする時間はありません。
Maciej Swic 2013

2
迅速なことはほとんど間違いではありません。正しい行はcell.selectedBackgroundView = bgColorView
John

13
これが機能するためには、ストーリーボード(またはXIBファイル)で、[なし]以外の[選択した背景色]を選択する必要があることに注意してください。これは、機能するためにはまずNoneに設定する必要があるといういくつかの回答とは逆です。Noneを使用すると、機能しません。私がそれを理解するまで私を狂わせていました。ありがとう。
角兵衛14

1
ストーリーボードも使用している場合、これをどのように機能させますか?
ジョン

42

テーブルビューのセル選択の背景色は、Interface BuilderのStoryboardで設定できます。

テーブルビューのセル選択の色なし


1
ストーリーボードからカスタムカラーを設定できないと思います。プログラムで設定する必要があります。
pallavi

37

セクションごとにセルが1つしかないグループ化されたテーブルがある場合は、次のコードをコードに追加します。 bgColorView.layer.cornerRadius = 10;

UIView *bgColorView = [[UIView alloc] init];
[bgColorView setBackgroundColor:[UIColor redColor]];
bgColorView.layer.cornerRadius = 10;
[cell setSelectedBackgroundView:bgColorView];
[bgColorView release]; 

QuartzCoreをインポートすることを忘れないでください。


28

スウィフト3:私にとってそれをcellForRowAtIndexPath:メソッドに入れるとうまくいきました

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

6
これを置くのに良い場所だと思いますawakeFromNib()(カスタムセルの場合)。
LembergSun 2017年

22

以下はiOS 8で動作します。

UITableViewCellSelectionStyleDefaultカスタム背景色を機能させるには、選択スタイルをに設定する必要があります。他のスタイルの場合、カスタム背景色は無視されます。以前の回答ではスタイルをなしに設定する必要があるため、動作に変更があるようです。

次のセルの完全なコード:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"MyCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // This is how you change the background color
    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor redColor];
    [cell setSelectedBackgroundView:bgColorView];        
    return cell;
}

このコードはメモリをリークしています。"alloc"またはオブジェクトの作成は、if(cell == nil){}ブロックで行う必要があります。または、iOSによってセルが解放されるたびにビューが作成されます。
GeneCode、2016

18

テーブルセルのカスタムセルを作成し、カスタムセルclass.mに以下のコードを挿入すると、正常に動作します。目的のカラー画像をselectionBackgroundUIImage に配置する必要があります。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    UIImage *selectionBackground = [UIImage imageNamed:@"yellow_bar.png"];
    UIImageView *iview=[[UIImageView alloc] initWithImage:selectionBackground];
    self.selectedBackgroundView=iview;
}

2
これは、1つのセルが選択されているときにbgビューを作成するだけでセルを初期化するときに、selectedBackgroundViewを設定するよりもメモリ効率が良いと思います。
dotlashlu 2013

11

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


1
IBDesignable、およびIBInspectable追加
のMichałZiobro

1
@MichałZiobroは、必要に応じて変数に追加@IBInspectableするだけです。@IBDesignableこれには役に立ちません。
Nik Kov 2018年

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

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


8

セルにカスタムハイライト色を追加する場合(およびセルにボタン、ラベル、画像などが含まれる場合)、次の手順に従います。

たとえば、黄色を選択したい場合:

1)backgroundselectedViewなどの、20%の不透明度(黄色)ですべてのセルに適合するビューを作成します。

2)セルコントローラーでこれを書きます:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     self.backgroundselectedView.alpha=1;
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundselectedView.alpha=0;
    [super touchesEnded:touches withEvent:event];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundSelectedImage.alpha=0;
    [super touchesCancelled:touches withEvent:event];
}

8

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

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

6

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

override func awakeFromNib() {
    super.awakeFromNib()

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

1
素敵な解決策!おかげで
トーマスCalmon

私は10セル以下の単純なテーブルビューを使用していますが、これはこれまでのところうまくいきます。
code4latte 2017年

5

グループ化されたテーブルの角の丸い背景を表示するためのクリスチャンの方法へのもう1つのヒント。

cornerRadius = 10セルに使用すると、四隅の丸い選択背景が表示されます。これは、テーブルビューのデフォルトUIとは異なります。

それで、私はcornerRadiusでそれを解決する簡単な方法について考えます。以下のコードからわかるように、セルの位置(上部、下部、中央、上部下部)を確認し、サブレイヤーを1つ追加して、上部コーナーまたは下部コーナーを非表示にします。これは、デフォルトのテーブルビューの選択背景とまったく同じ外観を示しています。

このコードをiPadでテストしましたsplitterview。必要に応じて、patchLayerのフレーム位置を変更できます。

同じ結果を達成するより簡単な方法があるかどうか教えてください。

if (tableView.style == UITableViewStyleGrouped) 
{
    if (indexPath.row == 0) 
    {
        cellPosition = CellGroupPositionAtTop;
    }    
    else 
    {
        cellPosition = CellGroupPositionAtMiddle;
    }

    NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];
    if (indexPath.row == numberOfRows - 1) 
    {
        if (cellPosition == CellGroupPositionAtTop) 
        {
            cellPosition = CellGroupPositionAtTopAndBottom;
        } 
        else 
        {
            cellPosition = CellGroupPositionAtBottom;
        }
    }

    if (cellPosition != CellGroupPositionAtMiddle) 
    {
        bgColorView.layer.cornerRadius = 10;
        CALayer *patchLayer;
        if (cellPosition == CellGroupPositionAtTop) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 10, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        } 
        else if (cellPosition == CellGroupPositionAtBottom) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 0, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        }
    }
}

4

XIBエディターには、次の標準オプションが用意されています。

セクション:青/灰色/なし

(オプションのある右側の列、4番目のタブ、最初のグループは「テーブルビューセル」、4番目のサブグループ、3つのアイテムの1番目は「選択」と表示されます)

おそらくあなたがしたいことは、正しい標準オプションを選択することによって達成されるかもしれません。


あなたが正しい。そのため、そうする場合、「cellForRowAtIndexPath」の選択色を次のように追加するだけで簡単に変更できます。UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@ "Cell"]; cell.selectedBackgroundView = [[UIView alloc] initWithFrame:CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed:(255/255)green:(0/255)blue:(0/255)alpha:0.1];
user8675、2015

ありがとう!行く方法
Fattie

3

で選択したセルのカスタムカラーUITableViewに従って、Maciej Swicの回答による優れたソリューション

それに追加するために、通常は以下のセル構成でSwicの回答を宣言します。

- (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選択したセルの隅にある効果の数をいじることができます。


3

私は他の誰よりもわずかに異なるアプローチをとっています。それは、選択された後ではなく、タッチ時の選択を反映しています。サブクラス化されたUITableViewCellがあります。タッチイベントで背景色を設定するだけで、タッチ時の選択をシミュレートし、setSelected関数で背景色を設定するだけです。selSelected関数で背景色を設定すると、セルの選択を解除できます。スーパーにタッチイベントを必ず渡してください。そうしないと、セルが実際に選択されたように動作しません。

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.backgroundColor = UIColor(white: 0.0, alpha: 0.1)
    super.touchesBegan(touches, withEvent: event)
}

override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
    self.backgroundColor = UIColor.clearColor()
    super.touchesCancelled(touches, withEvent: event)
}

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

    // Configure the view for the selected state
    self.backgroundColor = selected ? UIColor(white: 0.0, alpha: 0.1) : UIColor.clearColor()
}

3

すべてのセルの背景を追加するには(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];
        }
    } 

2

無効にするためにUITableViewCell「S setSelectedも動作します。

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

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

2

デフォルトで選択されている灰色の背景を削除したい場合は、次のコード行をcellForRowAtIndexPath関数に追加します。

yourCell.selectionStyle = .None

1
多くのおかげで、これは私にとって他の人ではなく正しい答えです。
DeyaEldeen

「なし」や「青」、「灰色」を設定する代わりに、「緑」のような色を設定する方法。
サティヤム2017年

2

Swift 3.0の場合:

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

    cell.contentView.backgroundColor = UIColor.red
}

いいですが、ユーザーが何かを選択した後にのみ機能します(デフォルトの選択色は開始時に残ります)
コンスタンチンサラヴァトフ

2

私は以下のアプローチを使用し、私のためにうまくいきます、

class MyTableViewCell : UITableViewCell {

                var defaultStateColor:UIColor?
                var hitStateColor:UIColor?

                 override func awakeFromNib(){
                     super.awakeFromNib()
                     self.selectionStyle = .None
                 }

// if you are overriding init you should set selectionStyle = .None

                override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let hitColor = hitStateColor {
                        self.contentView.backgroundColor = hitColor
                    }
                }

                override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }

                override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }
            }

2

Swift 4以降:

表のセルに次の行を追加します

let bgColorView = UIView()
bgColorView.backgroundColor =  .red
self.selectedBackgroundView = bgColorView

最後に以下のようになります

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

        // Configure the view for the selected state
        let bgColorView = UIView()
        bgColorView.backgroundColor =  .red
        self.selectedBackgroundView = bgColorView

    }

1

以下は、グループ化されたテーブルに必要なコードの重要な部分です。セクション内のいずれかのセルを選択すると、最初の行の色が変わります。最初にcellselectionstyleをnoneに設定しないと、ユーザーがrow0をクリックしたときにセルがbgColorViewに変わり、bgColorViewが再びフェードしてリロードされるときに、二重のリロードが発生します。これを行う簡単な方法があるかどうか、幸運を祈ります。

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if ([indexPath row] == 0) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIView *bgColorView = [[UIView alloc] init];
        bgColorView.layer.cornerRadius = 7;
        bgColorView.layer.masksToBounds = YES;
        [bgColorView setBackgroundColor:[UIColor colorWithRed:.85 green:0 blue:0 alpha:1]];
        [cell setSelectedBackgroundView:bgColorView];

        UIColor *backColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithWhite:1 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row0";
    }
    else if ([indexPath row] == 1) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row1";
    }
    else if ([indexPath row] == 2) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row2";
    }
    return cell;
}

#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:[indexPath section]];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];

    [tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tvStat cellForRowAtIndexPath:indexPath];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}

#pragma mark Table view Gestures

-(IBAction)singleTapFrom:(UIGestureRecognizer *)tapRecog
{

    CGPoint tapLoc = [tapRecog locationInView:tvStat];
    NSIndexPath *tapPath = [tvStat indexPathForRowAtPoint:tapLoc];

    NSIndexPath *seleRow = [tvStat indexPathForSelectedRow];
    if([seleRow section] != [tapPath section])
        [self tableView:tvStat didDeselectRowAtIndexPath:seleRow];
    else if (seleRow == nil )
        {}
    else if([seleRow section] == [tapPath section] || [seleRow length] != 0)
        return;

    if(!tapPath)
        [self.view endEditing:YES];

    [self tableView:tvStat didSelectRowAtIndexPath:tapPath];
}

1

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

- (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]];
    }
}

0

テーブルビューのスタイルが単純な場合は簡単ですが、グループスタイルの場合は少し問題があります。

CGFloat cellHeight = [self tableView:tableView heightForRowAtIndexPath:indexPath];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kGroupTableViewCellWidth+2, cellHeight)];
view.backgroundColor = kCommonHighlightedColor;
cell.selectedBackgroundView = view;
[view release];
UIRectCorner cornerFlag = 0;
CGSize radii = CGSizeMake(0, 0);
NSInteger theLastRow = --> (yourDataSourceArray.count - 1);
if (indexPath.row == 0) {
    cornerFlag = UIRectCornerTopLeft | UIRectCornerTopRight;
    radii = CGSizeMake(10, 10);
} else if (indexPath.row == theLastRow) {
    cornerFlag = UIRectCornerBottomLeft | UIRectCornerBottomRight;
    radii = CGSizeMake(10, 10);
}
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:cornerFlag cornerRadii:radii];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = maskPath.CGPath;
view.layer.mask = shapeLayer;

kGroupTableViewCellWidthに注意しました。これを300と定義します。これは、iPhoneのグループテーブルビューセルの幅です。


0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

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


0
override func setSelected(selected: Bool, animated: Bool) {
    // Configure the view for the selected state

    super.setSelected(selected, animated: animated)
    let selView = UIView()

    selView.backgroundColor = UIColor( red: 5/255, green: 159/255, blue:223/255, alpha: 1.0 )
    self.selectedBackgroundView = selView
}

今後のすべての読者が読めるように、回答の説明を追加してください
techspider

0

iOS 9.3を使用していて、ストーリーボードまたは設定で色を設定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;

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


0

以下のコードを試してください。

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[cellIdArray objectAtIndex:indexPath.row] forIndexPath:indexPath];

    // Configure the cell...
    cell.backgroundView =
    [[UIImageView alloc] init] ;
    cell.selectedBackgroundView =[[UIImageView alloc] init];

    UIImage *rowBackground;
    UIImage *selectionBackground;


    rowBackground = [UIImage imageNamed:@"cellBackgroundDarkGrey.png"];
    selectionBackground = [UIImage imageNamed:@"selectedMenu.png"];

    ((UIImageView *)cell.backgroundView).image = rowBackground;
    ((UIImageView *)cell.selectedBackgroundView).image = selectionBackground;



    return cell;
}

// Swiftバージョン:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell


        cell.selectedBackgroundView = UIImageView()
        cell.backgroundView=UIImageView()

        let selectedBackground : UIImageView = cell.selectedBackgroundView as! UIImageView
        selectedBackground.image = UIImage.init(named:"selected.png");

        let backGround : UIImageView = cell.backgroundView as! UIImageView
        backGround.image = UIImage.init(named:"defaultimage.png");

        return cell


    } 

0

Swift 4.x

選択の背景色をanyColourに変更するには、Swift Extensionを使用します

以下のようにUITableView Cell拡張機能を作成します

extension UITableViewCell{

    func removeCellSelectionColour(){
        let clearView = UIView()
        clearView.backgroundColor = UIColor.clear
        UITableViewCell.appearance().selectedBackgroundView = clearView
    } 

}

次に、セルインスタンスを指定してremoveCellSelectionColour()を呼び出します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.