Bagaimana cara mengubah warna highlight biru dari UITableViewCell?

131

Saya bertanya-tanya bagaimana cara mengubah highlight biru / pemilihan warna UITableViewCell, ada ide?

Thomas Joos
sumber

Jawaban:

213

Anda dapat mengubah warna sorot dengan beberapa cara.

  1. Ubah properti selectionStyle dari sel Anda. Jika Anda mengubahnya UITableViewCellSelectionStyleGray, itu akan menjadi abu-abu.

  2. Ubah selectedBackgroundViewproperti. Sebenarnya yang menciptakan gradien biru adalah tampilan. Anda bisa membuat tampilan dan menggambar apa yang Anda suka, dan menggunakan tampilan sebagai latar belakang sel tampilan tabel Anda.

zonble
sumber
8
keren, temukan penjelasan dan contoh yang bagus di sini: cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Thomas Joos
1
Saya menyadari bahwa di IB Anda tidak dapat mengatur "Pilihan" UITableViewCell menjadi "Tidak Ada" - karena selectedBackgroundViewkemudian hanya akan pernah muncul. Hanya setelah mengatur "Pilihan" ke Default, selectedBackgroundViewmuncul. Diuji pada iOS 6 dan 7.
Jonny
12
Terima kasih atas catatannya! Ini membuatnya sangat sederhana sekarang: Anda membuat tampilan baru (bahkan tidak perlu menentukan bingkai: cell.selectedBackgroundView = [UIView new];dan Anda mengatur warna apa pun yang Anda inginkan:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Dannie P
lihat di bagian bawah halaman ini, ada pendekatan yang lebih baru
Climbatize
145

Zonble telah memberikan jawaban yang sangat baik. Saya pikir mungkin berguna untuk memasukkan potongan kode pendek untuk menambahkan UIViewsel tableview yang akan ditampilkan sebagai tampilan latar belakang yang dipilih.

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;
  • sel adalah milikku UITableViewCell
  • Saya membuat UIView dan mengatur warna latar belakangnya menggunakan warna RGB (abu-abu terang)
  • Saya kemudian mengatur sel selectedBackgroundViewmenjadi UIViewyang saya buat dengan warna latar belakang yang saya pilih

Ini bekerja dengan baik untuk saya. Terima kasih atas tipnya Zonble.

T Davey
sumber
2
Ini tidak berfungsi dengan baik ketika menggunakan tampilan tabel dengan bagian. Saat dipilih, sel akan kehilangan batas dan tidak membulat saat sel pertama atau terakhir.
Kirk Woll
7
@kirk, maksud Anda dikelompokkan :)
Tieme
@Tieme, tidak, maksud saya bagian : "Tampilan tabel terdiri dari nol atau lebih bagian, masing-masing dengan barisnya sendiri."
Kirk Woll
Anda harus meletakkannya di dalam 'cellForRowAtIndexPath'. Bekerja dengan baik untuk saya, dengan satu bagian. Belum mencobanya dengan beberapa bagian.
Vincent
Agak terlambat ke permainan tetapi saya dapat mengonfirmasi itu bekerja dalam tampilan tabel dengan beberapa bagian (tidak dikelompokkan)
matto0
30

UITableViewCell memiliki tiga gaya pilihan default: -

  1. Biru
  2. Abu-abu
  3. Tidak ada

Implementasinya adalah sebagai berikut: -

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}
Arshad Parwez
sumber
7
alih-alih ketiga gaya default ini, kami juga dapat menyesuaikan gaya yang kami harapkan dengan properti terpilihBackgroundView.
Sunil Targe
Bekerja untuk saya ... Terima kasih banyak.
Mujeeb Farooqi
19

Di Swift, gunakan ini dalam cellForRowAtIndexPath

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

Jika Anda ingin warna pilihan Anda sama di setiap UITableViewCell, gunakan ini di AppDelegate.

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

Jika Anda ingin mengubahnya dengan lebar aplikasi, Anda dapat menambahkan logika ke Delegasi Aplikasi Anda

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
}
NatashaTheRobot
sumber
Sempurna. Adakah yang tahu cara mengatur warna teks dari sel default itu secara global pada pilih?
BananaAcid
1
ini berfungsi, tetapi kemudian seleksi dihapus langsung ketika mendorong controller tampilan baru.
bobmoff
Cara yang bagus untuk membuat perubahan global ke UITableViewCell
Shashi3456643
12

untuk kelengkapan: jika Anda membuat subkelas Anda sendiri, UITableViewCellAnda dapat menerapkan - (void)setSelected:(BOOL)selected animated:(BOOL)animatedmetode ini, dan mengatur warna latar belakang dari beberapa tampilan yang Anda tambahkan dalam tampilan konten. (jika itu masalahnya) atau dari contentView itu sendiri (jika tidak tercakup oleh salah satu dari pandangan Anda sendiri.

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

(tidak menggunakan? agar sesuai dengan lebar kecil kode sumber DIV :)

pendekatan ini memiliki dua keunggulan dibandingkan menggunakan terpilihBackgroundView, ia menggunakan lebih sedikit memori, dan sedikit lebih sedikit CPU, bukan bahwa Anda bahkan akan melihat kecuali Anda menampilkan ratusan sel.

Martijn Scheffer
sumber
Ini berfungsi hanya setelah tampilan baru ditetapkan ke selectedBackgroundView Di awal metode addself. selectedBackgroundView = [UIView new];
enadun
@enadun Metode ini berfungsi untuk saya di iOS 12, tanpa pengaturan selectedBackgroundViewproperti sama sekali.
Nate
11

Saya harus mengatur gaya pemilihan agar UITableViewCellSelectionStyleDefaultwarna latar belakang kustom berfungsi. Jika ada gaya lain, warna latar belakang khusus akan diabaikan. Diuji pada iOS 8.

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
6

Berdasarkan jawaban pengguna @ , Anda bisa menambahkan ekstensi ini di mana saja dalam kode aplikasi Anda dan memiliki warna pilihan Anda langsung di editor storyboard untuk setiap sel aplikasi Anda:

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

Warna pilihan UITableViewCell di storyboard

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

Di storyboard Anda, atur kelas UITableViewCell Anda ke UIDesignableTableViewCell, pada inspektur Atribut, Anda dapat mengubah warna sel yang dipilih ke warna apa pun.

Anda dapat menggunakan ini untuk semua sel Anda. Beginilah tampilan inspektur Atribut Anda.

Beginilah tampilan inspektur Atribut Anda

pengguna
sumber
Sangat kreatif! Bagus!
Kaushil Ruparelia
Anda dapat membuatnya lebih sederhana, lihat jawaban saya;) stackoverflow.com/a/51764804/537694
Climbatize
Saya menggunakan sel khusus untuk mengatur label, jadi ini berfungsi dengan baik, terima kasih! Ubah untuk Swift 5: Sekarang UIColor.clear, bukan UIColor.clearColor(). Tidak yakin apakah itu perubahan pada Swift juga, tetapi juga berfungsi tanpa @IBDesignable.
Neph
5

Swift 3.0 / 4.0

Jika Anda telah membuat sel khusus Anda sendiri, Anda dapat mengubah warna pilihan awakeFromNib()untuk semua sel:

 override func awakeFromNib() {
    super.awakeFromNib()

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

    self.selectedBackgroundView = colorView


}
Sam Bing
sumber
0

1- Tambahkan tampilan ke tampilan konten sel Anda.
2- Klik kanan sel Anda.
3- Jadikan tampilan tambahan sebagai "selectedBackgroundView" masukkan deskripsi gambar di sini

Badr
sumber