Saya bertanya-tanya bagaimana cara mengubah highlight biru / pemilihan warna UITableViewCell
, ada ide?
Saya bertanya-tanya bagaimana cara mengubah highlight biru / pemilihan warna UITableViewCell
, ada ide?
Jawaban:
Anda dapat mengubah warna sorot dengan beberapa cara.
Ubah properti selectionStyle dari sel Anda. Jika Anda mengubahnya UITableViewCellSelectionStyleGray
, itu akan menjadi abu-abu.
Ubah selectedBackgroundView
properti. 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.
selectedBackgroundView
kemudian hanya akan pernah muncul. Hanya setelah mengatur "Pilihan" ke Default, selectedBackgroundView
muncul. Diuji pada iOS 6 dan 7.
cell.selectedBackgroundView = [UIView new];
dan Anda mengatur warna apa pun yang Anda inginkan:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Zonble telah memberikan jawaban yang sangat baik. Saya pikir mungkin berguna untuk memasukkan potongan kode pendek untuk menambahkan UIView
sel 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;
UITableViewCell
selectedBackgroundView
menjadi UIView
yang saya buat dengan warna latar belakang yang saya pilihIni bekerja dengan baik untuk saya. Terima kasih atas tipnya Zonble.
UITableViewCell
memiliki tiga gaya pilihan default: -
Implementasinya adalah sebagai berikut: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
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
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
}
untuk kelengkapan: jika Anda membuat subkelas Anda sendiri, UITableViewCell
Anda dapat menerapkan - (void)setSelected:(BOOL)selected animated:(BOOL)animated
metode 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.
selectedBackgroundView
Di awal metode addself. selectedBackgroundView = [UIView new];
selectedBackgroundView
properti sama sekali.
Saya harus mengatur gaya pemilihan agar UITableViewCellSelectionStyleDefault
warna 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;
}
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
}
}
}
@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.
UIColor.clear
, bukan UIColor.clearColor()
. Tidak yakin apakah itu perubahan pada Swift juga, tetapi juga berfungsi tanpa @IBDesignable
.
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
}