UITableViewCellの青色のハイライト色を変更するにはどうすればよいですか?


回答:


213

ハイライトの色はいくつかの方法で変更できます。

  1. セルのselectionStyleプロパティを変更します。に変更するとUITableViewCellSelectionStyleGray、灰色になります。

  2. selectedBackgroundViewプロパティを変更します。実際、青のグラデーションを作成するのはビューです。ビューを作成して好きなように描画し、そのビューをテーブルビューのセルの背景として使用できます。


8
かっこいい、良い説明と例がここにあります:cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Thomas Joos

1
私はIBではUITableViewCellの "Selection"を "None"に設定できないことに気付きselectedBackgroundViewました。「選択」をデフォルトに設定した後にのみ、selectedBackgroundView表示されます。iOS 6および7でテスト済み
Jonny 2014

12
素晴らしいメモをありがとう!これにより、非常に簡単になりました。新しいビューを作成します(フレームを指定する必要すらありcell.selectedBackgroundView = [UIView new];ません:好きな色を設定します:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Dannie P

このページの下部を見ると、最近のアプローチがあります
1

145

ゾンブルはすでに優れた答えを提供しています。UIView選択した背景ビューとして表示されるテーブルビューセルにを追加するための短いコードスニペットを含めると便利だと思いました。

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    UIView *selectionColor = [[UIView alloc] init];
    selectionColor.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1];
    cell.selectedBackgroundView = selectionColor;
  • セルは私のです UITableViewCell
  • UIViewを作成し、RGBカラー(ライトグレー)を使用してその背景色を設定しました
  • 次に、選択した背景色で作成したセルにセルselectedBackgroundViewを設定しますUIView

これは私にはうまくいきました。先端のゾンブルをありがとう。


2
セクションでテーブルビューを使用する場合、これはうまく機能しません。選択すると、セルの境界が失われ、最初または最後のセルの場合は丸められません。
Kirk Woll、

7
@カーク、あなたはグループ化されたことを意味します:)
Tieme

@Tieme、いや、私はセクションを意味します:「テーブルビューは、それぞれ独自の行を持つ0個以上のセクションで構成されます。」
カークウォル

'cellForRowAtIndexPath'内に配置する必要があります。セクションは1つなので、私には問題ありません。複数のセクションで試していない。
Vincent、

ゲームには少し遅れますが、複数のセクション(グループ化されていない)のテーブルビューで機能することを確認できます
matto0

30

UITableViewCell 3つのデフォルトの選択スタイルがあります:-

  1. 青い
  2. グレー
  3. なし

実装は次のとおりです。

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}

7
これらの3つのデフォルトスタイルではなく、selectedBackgroundViewプロパティを使用して、予想されるスタイルに合わせてカスタマイズすることもできます。
Sunil Targe、

私のために働いた...おかげでトン。
Mujeeb Farooqi

19

Swiftでは、これを cellForRowAtIndexPath

let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView

すべての選択色を同じにするUITableViewCell場合は、これをで使用しAppDelegateます。

let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView

18

アプリ全体で変更する場合は、ロジックをアプリデリゲートに追加できます。

class AppDelegate: UIResponder, UIApplicationDelegate {

    //... truncated

   func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

        // set up your background color view
        let colorView = UIView()
        colorView.backgroundColor = UIColor.yellowColor()

        // use UITableViewCell.appearance() to configure 
        // the default appearance of all UITableViewCells in your app
        UITableViewCell.appearance().selectedBackgroundView = colorView

        return true
    }

    //... truncated
}

完璧です。そのデフォルトのセルのテキストの色を選択時にグローバルに設定する方法はありますか?
BananaAcid

1
これは機能しますが、新しいビューコントローラを押すと、選択が直接クリアされます。
bobmoff 2015

UITableViewCellにグローバルな変更を加える良い方法
Shashi3456643

12

完全を期すために:独自のサブクラスを作成したUITableViewCell場合は、- (void)setSelected:(BOOL)selected animated:(BOOL)animatedメソッドを実装し、コンテンツビューに追加したビューの背景色を設定できます。(その場合)またはcontentView自体(独自のビューのいずれかでカバーされていない場合)。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if(selected) {
        self.contentView.backgroundColor = UIColor.blueColor;
    } else {
        self.contentView.backgroundColor = UIColor.whiteColor;
    }
}

(?を使用せず、ソースコードDIVの小さな幅に合わせました:)

このアプローチには、selectedBackgroundViewを使用するよりも2つの利点があります。使用するメモリが少なく、CPUが少し少ないため、uが数百のセルを表示しない限り気付かないこともあります。


これは、新しいビューselectedBackgroundView がメソッドの最初に割り当てられた後にのみ機能しますaddself. selectedBackgroundView = [UIView new];
enadun

@enadunこのメソッドは、selectedBackgroundViewプロパティの設定がまったくないiOS 12で動作します。
ネイト

11

UITableViewCellSelectionStyleDefaultカスタム背景色を機能させるには、選択スタイルをに設定する必要があります。他のスタイルの場合、カスタムの背景色は無視されます。iOS 8でテスト済み。

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

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

6

@user の答えに基づいて、この拡張機能をアプリコードの任意の場所に追加し、アプリのすべてのセルのストーリーボードエディターで直接選択色を設定できます。

@IBDesignable extension UITableViewCell {
    @IBInspectable var selectedColor: UIColor? {
        set {
            if let color = newValue {
                selectedBackgroundView = UIView()
                selectedBackgroundView!.backgroundColor = color
            } else {
                selectedBackgroundView = nil
            }
        }
        get {
            return selectedBackgroundView?.backgroundColor
        }
    }
}

ストーリーボードのUITableViewCell選択色


5
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
  @IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
    didSet {
      selectedBackgroundView = UIView()
      selectedBackgroundView?.backgroundColor = selectedColor
    }
  }
}

ストーリーボードで、UITableViewCellのクラスをUIDesignableTableViewCellに設定します。属性インスペクターで、セルの選択した色を任意の色に変更できます。

これをすべてのセルに使用できます。これが、属性インスペクターの外観です。

これは、属性インスペクターが次のように表示される方法です


とてもクリエイティブ!すごい!
Kaushil Ruparelia 2017年

あなたはそれをさらに簡単にすることができます、私の答えを見てください;)stackoverflow.com/a/51764804/537694
Climbatize

私はカスタムセルを使用してラベルを設定しているので、これはうまく機能します、ありがとう!Swift 5の変更:現在UIColor.clearではありませんUIColor.clearColor()。Swiftでの変更かどうかはわかりませんが、なしでも機能し@IBDesignableます。
Neph

5

Swift 3.0 / 4.0

独自のカスタムセルを作成した場合awakeFromNib()は、すべてのセルの選択色を変更できます。

 override func awakeFromNib() {
    super.awakeFromNib()

    let colorView = UIView()
    colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)

    self.selectedBackgroundView = colorView


}

0

1-セルのコンテンツビューにビューを追加します。
2-セルを右クリックします。
3-追加したビューを「selectedBackgroundView」として作成します ここに画像の説明を入力してください

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