Tôi đang tự hỏi làm thế nào để thay đổi màu nổi bật / lựa chọn màu xanh của một UITableViewCell
, bất kỳ ý tưởng?
Tôi đang tự hỏi làm thế nào để thay đổi màu nổi bật / lựa chọn màu xanh của một UITableViewCell
, bất kỳ ý tưởng?
Câu trả lời:
Bạn có thể thay đổi màu nổi bật theo nhiều cách.
Thay đổi thuộc tính selectStyle của ô của bạn. Nếu bạn thay đổi nó UITableViewCellSelectionStyleGray
, nó sẽ có màu xám.
Thay đổi selectedBackgroundView
tài sản. Trên thực tế những gì tạo ra gradient màu xanh là một khung nhìn. Bạn có thể tạo chế độ xem và vẽ những gì bạn thích và sử dụng chế độ xem làm nền của các ô xem bảng của bạn.
selectedBackgroundView
sau đó sẽ không bao giờ xuất hiện. Chỉ sau khi đặt "Lựa chọn" thành Mặc định, nó sẽ selectedBackgroundView
hiển thị. Đã thử nghiệm trên iOS 6 và 7.
cell.selectedBackgroundView = [UIView new];
và bạn đặt bất kỳ màu nào bạn muốn:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Zonble đã cung cấp một câu trả lời tuyệt vời. Tôi nghĩ rằng có thể hữu ích khi bao gồm một đoạn mã ngắn để thêm một UIView
ô vào ô xem bảng sẽ hiển thị dưới dạng chế độ xem nền đã chọn.
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
là màu UIView
mà tôi đã tạo với màu nền đã chọnĐiều này làm việc tốt cho tôi. Cảm ơn vì tiền boa.
UITableViewCell
có ba kiểu chọn mặc định: -
Thực hiện như sau: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
Trong Swift, sử dụng cái này trong cellForRowAtIndexPath
let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView
Nếu bạn muốn màu lựa chọn của bạn giống nhau UITableViewCell
, hãy sử dụng màu này trong AppDelegate
.
let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
Nếu bạn muốn thay đổi ứng dụng rộng rãi, bạn có thể thêm logic vào Đại biểu ứng dụng của mình
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
}
để hoàn thiện: nếu bạn đã tạo lớp con của riêng mình, UITableViewCell
bạn có thể triển khai - (void)setSelected:(BOOL)selected animated:(BOOL)animated
phương thức và đặt màu nền của một số chế độ xem mà bạn đã thêm trong chế độ xem nội dung. (nếu đó là trường hợp) hoặc của chính nội dung Xem (nếu nó không được bao phủ bởi một trong các chế độ xem của riêng bạn.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if(selected) {
self.contentView.backgroundColor = UIColor.blueColor;
} else {
self.contentView.backgroundColor = UIColor.whiteColor;
}
}
(không sử dụng? để vừa với chiều rộng nhỏ của mã nguồn DIV's :)
Cách tiếp cận này có hai ưu điểm so với sử dụng được chọnBackgroundView, nó sử dụng ít bộ nhớ hơn và CPU ít hơn một chút, thậm chí bạn sẽ không nhận ra trừ khi bạn hiển thị hàng trăm ô.
selectedBackgroundView
Lúc bắt đầu phương thức thêmself. selectedBackgroundView = [UIView new];
selectedBackgroundView
tính.
Tôi phải đặt kiểu chọn thành UITableViewCellSelectionStyleDefault
màu nền tùy chỉnh để hoạt động. Nếu bất kỳ phong cách khác, màu nền tùy chỉnh sẽ bị bỏ qua. Đã thử nghiệm trên iOS 8.
Mã đầy đủ cho ô như sau:
- (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;
}
Dựa trên câu trả lời của @ người dùng , bạn chỉ có thể thêm tiện ích mở rộng này ở bất kỳ đâu trong mã ứng dụng của mình và có màu lựa chọn trực tiếp trong trình chỉnh sửa bảng phân cảnh cho mọi ô của ứng dụng:
@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
}
}
}
Trong bảng phân cảnh của bạn, đặt lớp UITableViewCell của bạn thành UIDesignableTableViewCell, trên trình kiểm tra thuộc tính, bạn có thể thay đổi màu đã chọn của ô thành bất kỳ màu nào.
Bạn có thể sử dụng điều này cho tất cả các tế bào của bạn. Đây là cách thanh tra thuộc tính của bạn sẽ trông như thế nào.
UIColor.clear
, không phải UIColor.clearColor()
. Không chắc đó có phải là một thay đổi trong Swift không nhưng nó cũng hoạt động mà không có @IBDesignable
.
Swift 3.0 / 4.0
Nếu bạn đã tạo ô tùy chỉnh của riêng mình, bạn có thể thay đổi màu lựa chọn awakeFromNib()
cho tất cả các ô:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}