Warna yang dipilih UITableView Cell?


319

Saya telah membuat kebiasaan UITableViewCell. Tampilan tabel menunjukkan data baik-baik saja. Apa yang saya terjebak adalah ketika pengguna menyentuh sel tampilan tabel, maka saya ingin menunjukkan warna latar belakang sel selain nilai [warna biru] default untuk menyorot pemilihan sel. Saya menggunakan kode ini tetapi tidak ada yang terjadi:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

Jawaban:


365

Saya pikir Anda berada di jalur yang benar, tetapi sesuai dengan definisi kelas untuk selectedBackgroundView:

Standarnya adalah nil untuk sel dalam tabel gaya sederhana (UITableViewStylePlain) dan non-nil untuk tabel bagian grup UITableViewStyleGrouped).

Oleh karena itu, jika Anda menggunakan tabel gaya biasa, maka Anda harus mengalokasikan-init yang baru UIViewdengan warna latar belakang yang Anda inginkan dan kemudian menugaskannya selectedBackgroundView.

Atau, Anda dapat menggunakan:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

jika semua yang Anda inginkan adalah latar belakang abu-abu saat sel dipilih. Semoga ini membantu.


1
Properti ini juga dapat diatur di storyboard jika Anda lebih suka meninggalkan hal-hal terkait tampilan ke tampilan.
IIllIIll

1
Versi Swift 3: cell.selectionStyle = .gray // Anda juga dapat menggunakan .none, .blue atau .default
Sébastien REMY

6
Jawaban ini sudah cukup lama ... Apakah ada yang telah diubah di versi iOS yang lebih baru? Saya memiliki tabel gaya biasa dan terpilihBackgroundView saya TIDAK nihil. Menariknya mengubah backgroundColor pada tampilan ini tidak memiliki efek apa pun, sebaliknya saya harus menggantinya dengan UIView baru dengan backgroundColor yang saya inginkan untuk membuatnya bekerja.
ndreisg

Anda baru saja menyelamatkan saya dari menjadi benar-benar gila. Terimakasih banyak!
mrwheet

656

Tidak perlu sel khusus. Jika Anda hanya ingin mengubah warna sel yang dipilih, Anda dapat melakukan ini:

Tujuan-C:

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

Cepat:

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

47
Ini berfungsi, tetapi dalam UITableView yang dikelompokkan, sudut-sudut bulatnya hilang.
David

1
@ David Apakah cornerRadius = 7 berfungsi di mana saja dalam tampilan tabel yang dikelompokkan? Bagaimana jika sel di tengah? Tidak punya waktu untuk menguji ini.
Maciej Swic

2
karena cepat adalah kesalahan kecil. Baris yang benar adalah cell.selectedBackgroundView = bgColorView
John Kakon

13
Ketahuilah bahwa agar ini berfungsi, di Storyboard (atau file XIB) Anda harus memilih warna Latar Belakang yang Dipilih selain Tidak Ada. Ini bertentangan dengan beberapa jawaban yang mengatakan bahwa Anda pertama-tama harus mengaturnya ke Kosong agar dapat berfungsi. Dengan Tidak Ada, itu tidak akan berhasil. Membuatku gila sampai aku menemukan jawabannya. Terima kasih.
kakubei

1
Bagaimana Anda membuat ini berfungsi ketika Anda juga menggunakan storyboard?
John

42

Warna latar pemilihan sel Table View dapat diatur melalui Storyboard di Interface Builder:

tampilan tabel warna pemilihan sel Tidak ada


1
Saya pikir kita tidak bisa mengatur warna khusus dari storyboard. Perlu mengaturnya secara programatis.
Pallavi

37

Jika Anda memiliki tabel yang dikelompokkan dengan hanya satu sel per bagian, cukup tambahkan baris tambahan ini ke kode: bgColorView.layer.cornerRadius = 10;

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

Jangan lupa untuk mengimpor QuartzCore.


28

Swift 3: bagi saya itu berhasil ketika Anda memasukkannya ke dalam cellForRowAtIndexPath:metode

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

6
Saya pikir tempat yang lebih baik untuk meletakkan ini adalah awakeFromNib()metode (dalam kasus sel khusus).
LembergSun

22

Berikut ini berfungsi untuk saya di iOS 8.

Saya harus mengatur gaya pemilihan agar UITableViewCellSelectionStyleDefaultwarna latar belakang kustom berfungsi. Jika ada gaya lain, warna latar belakang khusus akan diabaikan. Tampaknya ada perubahan perilaku karena jawaban sebelumnya perlu mengatur gaya untuk tidak ada.

Kode lengkap untuk sel sebagai berikut:

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

Kode ini bocor memori. "Alokasi" atau pembuatan objek apa pun harus dalam if (cell == nil) {} blok. Atau tampilan akan dibuat setiap kali sel dirilis oleh iOS.
GeneCode

18

Buat sel kustom untuk sel tabel Anda dan di kelas sel kustom. Letakkan kode di bawah ini, itu akan berfungsi dengan baik. Anda perlu menempatkan gambar warna yang diinginkan di 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
Saya pikir ini bisa lebih efisien dari pengaturan memori yang dipilihBackgroundView ketika menginisialisasi sel dengan hanya membuat tampilan bg ketika satu sel dipilih.
dotslashlu

11

Ekstensi 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
tambahkan IBDesignable, dan IBInspectable
Michał Ziobro

1
@ MichałZiobro tambahkan saja @IBInspectablevar jika Anda mau. @IBDesignabletidak berguna untuk ini.
Nik Kov

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

Kita perlu mengatur tampilan latar belakang yang dipilih dalam metode ini.


8

Jika Anda ingin menambahkan warna yang disorot khusus ke sel Anda (dan sel Anda berisi tombol, label, gambar, dll.) Saya mengikuti langkah-langkah berikut:

Misalnya jika Anda ingin warna kuning yang dipilih:

1) Buat tampilan yang sesuai dengan semua sel dengan opacity 20% (dengan warna kuning) disebut misalnya backgroundselectedView

2) Di pengontrol sel tulis ini:

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

Di Swift 4, Anda juga dapat mengatur warna latar belakang sel tabel Anda secara global (diambil dari sini ):

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

6

Jika Anda menggunakan TableViewCell khusus, Anda juga dapat mengganti awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

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

1
Solusi bagus! Terima kasih
Thomás Calmon

Saya memiliki tampilan tabel sederhana dengan tidak lebih dari 10 sel, ini bekerja dengan baik sejauh ini.
code4latte

5

Satu lagi tip untuk cara Christian untuk menunjukkan latar belakang sudut bundar untuk tabel grup.

Jika saya gunakan cornerRadius = 10untuk sel, ini menunjukkan latar belakang pilihan bulat empat sudut. Ini tidak sama dengan UI default tampilan tabel.

Jadi, saya memikirkan cara mudah untuk menyelesaikannya dengan cornerRadius . Seperti yang dapat Anda lihat dari kode di bawah ini, periksa tentang lokasi sel (atas, bawah, tengah atau topbottom) dan tambahkan satu lagi sub lapisan untuk menyembunyikan sudut atas atau sudut bawah. Ini hanya menunjukkan tampilan yang persis sama dengan latar belakang pemilihan tampilan tabel default.

Saya menguji kode ini dengan iPad splitterview. Anda dapat mengubah posisi bingkai patchLayer sesuai kebutuhan.

Tolong beri tahu saya jika ada cara yang lebih mudah untuk mencapai hasil yang sama.

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

Saya ingin mencatat bahwa editor XIB menawarkan kepada Anda opsi standar berikut:

Bagian: biru / abu-abu / tidak ada

(kolom kanan dengan opsi, tab ke-4, grup pertama "Table View Cell", subkelompok ke-4, item pertama dari 3 berbunyi "Pilihan")

Mungkin apa yang ingin Anda lakukan dapat dicapai dengan memilih opsi standar yang tepat.


kamu benar. Karena itu, jika Anda melakukannya, Anda dapat dengan mudah mengubah warna pilihan di "cellForRowAtIndexPath" dengan menambahkan: UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ "Cell"]; cell.selectedBackgroundView = [[Alokasi UIVi] initWithFrame: CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed: (255/255) hijau: (0/255) biru: (0/255) alpha: 0,1];
user8675

TERIMA KASIH! cara untuk pergi
Fattie

3

Sesuai warna khusus untuk sel yang dipilih UITableView, solusi hebat sesuai jawaban Maciej Swic

Sebagai tambahan, Anda mendeklarasikan jawaban Swic dalam konfigurasi Cell yang biasanya di bawah:

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

Dan untuk efek tambahan, alih-alih warna sistem, Anda dapat menggunakan nilai RGB untuk tampilan warna kustom. Dalam kode saya ini adalah bagaimana saya mencapainya:

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

}

Beri tahu saya jika itu juga berlaku untuk Anda. Anda dapat mengacaukan dengan cornerRadiusnomor untuk efek di sudut sel yang dipilih.


3

Saya punya pendekatan yang sedikit berbeda dari orang lain yang mencerminkan pemilihan pada sentuhan daripada setelah dipilih. Saya memiliki UITableViewCell subkelas. Yang harus Anda lakukan adalah mengatur warna latar belakang pada acara sentuh, yang mensimulasikan pemilihan saat disentuh, dan kemudian mengatur warna latar belakang pada fungsi setSelected. Mengatur warna latar belakang dalam fungsi selSelected memungkinkan untuk membatalkan pilihan sel. Pastikan untuk meneruskan acara sentuh ke super, jika tidak sel tidak akan bertindak seolah-olah yang dipilih.

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

Untuk menambahkan latar belakang untuk semua sel (menggunakan jawaban 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

Untuk override UITableViewCell's setSelectedjuga bekerja.

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

bagi mereka yang hanya ingin menyingkirkan latar belakang abu-abu yang dipilih, letakkan baris kode ini di func cellForRowAtIndexPath Anda:

yourCell.selectionStyle = .None

1
terima kasih banyak, ini adalah jawaban yang tepat bagi saya bukan yang lain.
DeyaEldeen

Cara mengatur warna seperti "hijau" alih-alih mengatur tidak ada atau biru atau abu-abu.
Satyam

2

untuk Swift 3.0:

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

    cell.contentView.backgroundColor = UIColor.red
}

Bagus, tetapi hanya akan berfungsi setelah pengguna memilih sesuatu (warna pilihan default akan tetap di awal)
Konstantin Salavatov

2

Saya menggunakan pendekatan di bawah ini dan berfungsi dengan baik untuk saya,

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+:

Tambahkan baris berikut di sel tabel Anda

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

Akhirnya harus seperti di bawah ini

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

Berikut adalah bagian penting dari kode yang diperlukan untuk tabel yang dikelompokkan. Ketika salah satu sel dalam suatu bagian dipilih, baris pertama berubah warna. Tanpa awalnya mengatur gaya selsel untuk tidak ada ada memuat ulang ganda annonying ketika pengguna mengklik row0 di mana sel berubah menjadi bgColorView lalu memudar dan memuat ulang bgColorView lagi. Semoga Sukses dan beri tahu saya jika ada cara yang lebih sederhana untuk melakukan ini.

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

Dalam hal kelas sel khusus. Timpa saja:

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

Sangat mudah ketika gaya tampilan tabel sederhana, tetapi dalam gaya grup, ini sedikit masalah, saya menyelesaikannya dengan:

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;

mencatat kGroupTableViewCellWidth, saya mendefinisikannya sebagai 300, itu adalah lebar sel tampilan tabel grup di iPhone


0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

Pastikan Anda telah menggunakan baris di atas untuk menggunakan efek seleksi


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
}

Harap tambahkan beberapa penjelasan tentang jawaban Anda agar dapat dibaca oleh semua pembaca di masa mendatang
techspider

0

Saya menggunakan iOS 9.3 dan pengaturan warna melalui Storyboard atau pengaturan cell.selectionStyletidak bekerja untuk saya, tetapi kode di bawah ini berfungsi:

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;

Saya menemukan solusi ini di sini .


0

Coba ikuti kode.

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

// Versi 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

Untuk Mengubah warna latar belakang pilihan ke anyColour gunakan Swift Extension

Buat ekstensi UITableView Cell seperti di bawah ini

extension UITableViewCell{

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

}

Kemudian panggil removeCellSelectionColour () dengan instance sel.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.