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];
Momi
sumber

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.

Andrew Little
sumber
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
Maciej Swic
sumber
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

pkamb
sumber
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.

Christian Fritz
sumber
28

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

let view = UIView()
view.backgroundColor = UIColor.red
cell.selectedBackgroundView = view
phitsch
sumber
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;
}
samwize
sumber
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;
}
rajesh
sumber
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

Nik Kov
sumber
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.

Hemanshu Liya
sumber
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];
}
Javier Flores Font
sumber
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
sundance
sumber
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
}
Franck
sumber
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];
        }
    }
}
Wonil
sumber
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.

18446744073709551615
sumber
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.

DrBongo
sumber
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()
}
Stephen Donnell
sumber
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];
        }
    } 
John
sumber
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
}
Quanlong
sumber
2

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

yourCell.selectionStyle = .None
Paul Lehn
sumber
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
}
Wilson
sumber
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
                    }
                }
            }
Suryavel TR
sumber
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

    }
Rajesh Loganathan
sumber
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];
}
firescar96
sumber
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]];
    }
}
Lal Krishna
sumber
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

勇敢 的 心
sumber
0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

Pastikan Anda telah menggunakan baris di atas untuk menggunakan efek seleksi

tushar
sumber
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
}
Ranjan
sumber
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 .

Felipe Andrade
sumber
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


    } 
Avijit Nagare
sumber
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.

iSrinivasan27
sumber