ฉันสงสัยว่าจะเปลี่ยนสีน้ำเงินไฮไลต์ / สีการเลือกของ a UITableViewCell
มีความคิดอย่างไร?
ฉันสงสัยว่าจะเปลี่ยนสีน้ำเงินไฮไลต์ / สีการเลือกของ a UITableViewCell
มีความคิดอย่างไร?
คำตอบ:
คุณสามารถเปลี่ยนสีไฮไลต์ได้หลายวิธี
เปลี่ยนคุณสมบัติ selectionStyle ของเซลล์ของคุณ หากเปลี่ยนUITableViewCellSelectionStyleGray
เป็นสีจะเป็นสีเทา
เปลี่ยนselectedBackgroundView
คุณสมบัติ จริงๆแล้วสิ่งที่สร้างการไล่ระดับสีน้ำเงินคือมุมมอง คุณสามารถสร้างมุมมองและวาดสิ่งที่คุณต้องการและใช้มุมมองเป็นพื้นหลังของเซลล์มุมมองตารางของคุณ
selectedBackgroundView
จะไม่ปรากฏขึ้นมา หลังจากตั้งค่า "การเลือก" เป็นค่าเริ่มต้นระบบจะselectedBackgroundView
แสดงขึ้น ทดสอบบน iOS 6 และ 7
cell.selectedBackgroundView = [UIView new];
และคุณกำหนดสีที่คุณต้องการ:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Zonble ได้ให้คำตอบที่ยอดเยี่ยมแล้ว ฉันคิดว่าการรวมข้อมูลโค้ดสั้น ๆ อาจเป็นประโยชน์สำหรับการเพิ่มUIView
ลงในเซลล์ tableview ซึ่งจะนำเสนอเป็นมุมมองพื้นหลังที่เลือก
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
ให้เป็นเซลล์UIView
ที่ฉันสร้างขึ้นด้วยสีพื้นหลังที่ฉันเลือกนี้ทำงานได้ดีสำหรับฉัน. ขอบคุณสำหรับเคล็ดลับ Zonble
UITableViewCell
มีรูปแบบการเลือกเริ่มต้นสามแบบ: -
การดำเนินการมีดังนี้: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
ใน Swift ให้ใช้สิ่งนี้ใน cellForRowAtIndexPath
let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView
หากคุณต้องการเลือกสีของคุณจะเหมือนกันในทุก ๆใช้นี้UITableViewCell
AppDelegate
let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
หากคุณต้องการเปลี่ยนแอปให้กว้างขึ้นคุณสามารถเพิ่มตรรกะให้กับตัวแทนแอปของคุณได้
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
}
เพื่อความสมบูรณ์: หากคุณสร้างคลาสย่อยของ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 คือใช้หน่วยความจำน้อยและ CPU น้อยลงเล็กน้อยไม่ใช่ว่าคุณจะสังเกตเห็นได้เว้นแต่คุณจะแสดงเซลล์หลายร้อยเซลล์
selectedBackgroundView
ที่จุดเริ่มต้นของวิธีการเพิ่มself. selectedBackgroundView = [UIView new];
selectedBackgroundView
คุณสมบัติเลย
ฉันต้องตั้งค่ารูปแบบการเลือกเพื่อ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;
}
จากคำตอบของผู้ใช้ @คุณสามารถเพิ่มส่วนขยายนี้ที่ใดก็ได้ในโค้ดแอปของคุณและมีสีที่คุณเลือกโดยตรงในตัวแก้ไขสตอรีบอร์ดสำหรับทุกเซลล์ของแอปของคุณ:
@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
}
}
}
ในกระดานเรื่องราวของคุณตั้งค่าคลาสของ UITableViewCell ของคุณเป็น UIDesignableTableViewCell บนตัวตรวจสอบคุณสมบัติคุณสามารถเปลี่ยนสีที่เลือกของเซลล์ของคุณเป็นสีใดก็ได้
คุณสามารถใช้สิ่งนี้กับเซลล์ทั้งหมดของคุณ นี่คือลักษณะของตัวตรวจสอบแอตทริบิวต์ของคุณ
UIColor.clear
UIColor.clearColor()
ไม่แน่ใจว่านั่นเป็นการเปลี่ยนแปลงใน Swift ด้วยหรือไม่ แต่ก็ใช้ได้@IBDesignable
เช่นกัน
สวิฟต์ 3.0 / 4.0
หากคุณสร้างเซลล์ที่กำหนดเองคุณสามารถเปลี่ยนสีการเลือกawakeFromNib()
สำหรับเซลล์ทั้งหมดได้:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}