有两个具有不同背景渐变的UITableViewCells

时间:2014-09-17 09:51:49

标签: c# ios uitableview xamarin

我有一个渐变背景的自定义单元格。在我的自定义单元格的构造函数中,我有:

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并设置了我的渐变。还有两个问题:

  1. 每次创建两个UIViews
  2. 通过细胞重用,每个第9个细胞现在都具有新的渐变背景颜色。这不应该发生。
  3. 我有什么选择?

    我想到的一件事是使用另一个具有不同重用标识符的自定义单元类。但我不想管理两个自定义单元格类,除了不同的颜色,使用相同的代码。你有什么解决方案?

1 个答案:

答案 0 :(得分:0)

我没有找到任何其他解决方案。这就是我现在正在使用的:

  1. 我复制了自定义表格视图单元格并从中创建了一个新类。
  2. 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;
        }
    }
    
  3. 现在我到处都有重复的代码:在复制的自定义表格视图单元格和GetCell

    我想到的另一个选择是子类化我的自定义表视图单元类。但我没有让它发挥作用。不知道特殊构造函数(传递颜色)或类似工厂方法的东西是否会更好。