UITableViewCell не обрабатывает UITableViewCellSelectionStyleBlue при добавлении подслоя CAGradientLayer - PullRequest
1 голос
/ 22 июля 2011

У меня есть UITableViewCell, к которому я добавил градиент с помощью CAGradientLayer. Это работает нормально, но ячейка таблицы не становится синей при выделении, даже после установки ее selectionStyle в UITableViewCellSelectionStyleBlue. Если я не добавлю слой градиента, он будет работать нормально.

Есть ли способ заставить эти элементы работать вместе?

Вот мой код внутри cellForRowAtIndexPath:

    //cell gradient        
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = CGRectMake(10, 0, 300, 50);
    gradient.colors = [NSArray arrayWithObjects:
                       (id)[[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1] CGColor],
                       (id)[[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1] CGColor],
                       (id)[[UIColor colorWithRed:245/255.0 green:245/255.0 blue:245/255.0 alpha:1] CGColor],
                       (id)[[UIColor colorWithRed:247/255.0 green:247/255.0 blue:247/255.0 alpha:1] CGColor],
                       nil];
    gradient.locations = [NSArray arrayWithObjects:
                          (id)[NSNumber numberWithFloat:0.00],
                          (id)[NSNumber numberWithFloat:0.50],
                          (id)[NSNumber numberWithFloat:0.51],
                          (id)[NSNumber numberWithFloat:1.0],                                                                                          
                          nil];
    [cell.layer insertSublayer:gradient atIndex:0];


    //bring back rounded corners by creating a masklayer 
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:gradient.bounds byRoundingCorners:UIRectCornerBottomRight|UIRectCornerBottomLeft cornerRadii:CGSizeMake(8, 8)];
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = gradient.bounds;
    maskLayer.path = maskPath.CGPath;
    gradient.mask = maskLayer;

    //add the cell shadow
    cell.layer.shadowColor = [[UIColor blackColor] CGColor];
    cell.layer.shadowRadius = 3;
    cell.layer.shadowOpacity = 0.5;
    cell.layer.shadowOffset = CGSizeMake(0, 0);

    cell.selectionStyle = UITableViewCellSelectionStyleBlue;      

1 Ответ

2 голосов
/ 22 июля 2011

Похоже, что вы можете поместить градиент поверх представления, которое изменяется при его выборе, - может отображаться представление UITableViewCellSelectionStyleBlue, но вы просто не можете его увидеть (способ проверить это - это только покрыть часть градиента Ваша ячейка - если другая часть меняет цвет, когда она выбрана, то это проблема).

Если это проблема, то вы можете сделать свой собственный чертеж для ячейки, когда она выбрана с помощью подкласса UITableViewCell, или вы можете сделать так, чтобы градиент исчезал при выборе ячейки (и появлялся снова, когда ячейка отменяется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...