我有一个渐变背景的自定义单元格。在我的自定义单元格的构造函数中,我有:
this.BackgroundColor = UIColor.Clear;
RectangleF cellFrame = new RectangleF (this.Bounds.X, this.Bounds.Y, this.Bounds.Width, 60);
CAGradientLayer gradientForStateNormal = new CAGradientLayer ();
CAGradientLayer gradientForStateSelected = new CAGradientLayer ();
gradientForStateNormal.Frame = cellFrame;
gradientForStateSelected.Frame = cellFrame;
gradientForStateNormal.NeedsDisplayOnBoundsChange = true;
gradientForStateNormal.MasksToBounds = true;
gradientForStateNormal.Colors = new CGColor[]{ UIColor.White.CGColor, UIColor.White.CGColor, UIColor.FromRGB(128,128,128).CGColor };
gradientForStateSelected.NeedsDisplayOnBoundsChange = true;
gradientForStateSelected.MasksToBounds = true;
gradientForStateSelected.Colors = new CGColor[]{ UIColor.FromRGB(16,16,16).CGColor, UIColor.White.CGColor, UIColor.White.CGColor };
UIView selectedBackgroundView = new UIView (cellFrame);
UIView backgroundView = new UIView (cellFrame);
backgroundView.Layer.InsertSublayer (gradientForStateNormal, 0);
selectedBackgroundView.Layer.InsertSublayer (gradientForStateSelected, 0);
this.BackgroundView = backgroundView;
this.SelectedBackgroundView = selectedBackgroundView;
这适用于单个渐变背景色。现在我有了应该获得不同渐变背景颜色的单元格。因此,我实施了WillDisplay
并设置了我的渐变。还有两个问题:
我有什么选择?
我想到的一件事是使用另一个具有不同重用标识符的自定义单元类。但我不想管理两个自定义单元格类,除了不同的颜色,使用相同的代码。你有什么解决方案?
答案 0 :(得分:0)
我没有找到任何其他解决方案。这就是我现在正在使用的:
在GetCell
中,我按照我的标准询问,而不是单独创建并返回单元格:
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath){
// your criteria here
if (read) {
var cell = (UnreadCell)tableView.DequeueReusableCell (UnreadCell.cellIdentifier);
cell.UpdateCell (...);
cell.Accessory = UITableViewCellAccessory.DisclosureIndicator;
cell.SeparatorInset = UIEdgeInsets.Zero;
return cell;
} else {
var cell = (ReadCell)tableView.DequeueReusableCell (ReadCell.cellIdentifier);
cell.UpdateCell (...);
cell.Accessory = UITableViewCellAccessory.DisclosureIndicator;
cell.SeparatorInset = UIEdgeInsets.Zero;
return cell;
}
}
现在我到处都有重复的代码:在复制的自定义表格视图单元格和GetCell
。
我想到的另一个选择是子类化我的自定义表视图单元类。但我没有让它发挥作用。不知道特殊构造函数(传递颜色)或类似工厂方法的东西是否会更好。