UITableViewCell с пользовательской UIButton в качестве подпредставления: CAGradientLayer кнопки не отображается - PullRequest
1 голос
/ 25 ноября 2010

небольшая проблема с моим пользовательским подклассом UIButton при добавлении в contentView объекта UITableViewCell.в основном, класс кнопки добавляет CAGradientLayer в свой конструктор для создания глянцевого фона:

CALayer *layer = self.layer;
layer.cornerRadius = self.frame.size.height/6;
layer.masksToBounds = YES;
layer.borderWidth = 1.0f;  
layer.borderColor = [UIColor colorWithRed:0.0 
                                  green:0.0 
                                   blue:0.0 
                                  alpha:.75].CGColor;    
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = [NSArray arrayWithObjects:
                      (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor,
                      (id)[UIColor colorWithWhite:1.0f alpha:0.2f].CGColor,
                      (id)[UIColor colorWithWhite:0.75f alpha:0.2f].CGColor,
                      (id)[UIColor colorWithWhite:0.4f alpha:0.2f].CGColor,
                      (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor,
                      nil];
gradientLayer.locations = [NSArray arrayWithObjects:
                         [NSNumber numberWithFloat:0.0f],
                         [NSNumber numberWithFloat:0.5f],
                         [NSNumber numberWithFloat:0.5f],
                         [NSNumber numberWithFloat:0.8f],
                         [NSNumber numberWithFloat:1.0f],
                         nil];
gradientLayer.frame = self.layer.bounds;
[self.layer addSublayer:gradientLayer]; 

, это прекрасно работает везде в приложении, за исключением случая, когда я просто пытался добавить эту кнопку как подпредставление UITableViewCell:

myButton = [[MyButton alloc] initWithFrame:CGRectZero];
[self.contentView addSubview:oddsButton];

И выложено в layoutSubviews:

- (void)layoutSubviews {
    [super layoutSubviews];
    CGRect rect;
    rect.size.height = 30;
    rect.size.width = 60;
    rect.origin.x = self.frame.size.width - rect.size.width - 20;
    rect.origin.y = self.frame.size.height/2 - rect.size.height/2;
    myButton.frame = rect;
}

Кнопка отображается нормально, но слой не отображается вообще - я просто получаю прямоугольную кнопку однотонного цвета.Я также попытался вручную изменить размер слоя в layoutSubviews, но это не имеет значения.Казалось бы, это предполагает, что весь кварцевый рисунок игнорируется в ячейке табличного представления.в качестве альтернативы я рассмотрел добавление глянца в качестве подпредставления кнопки, и это работает, но отображается поверх обычного вида кнопки / надписей / и т. д., поэтому кажется не совсем идеальным.

...