Можно ли установить альфа-свойство UITableViewCell accessoryView? - PullRequest
12 голосов
/ 17 сентября 2009

Я использую UIImageView в качестве accessoryView в UITableViewCell, который создаю программно. Я перепробовал все, что мог придумать, чтобы установить свойство accessoryView alpha, но оно не работает. Я могу без проблем установить свойства hidden и opaque, но alpha ненавидит меня.

Я попытался создать новый проект, содержащий один UITableViewController и следующий tableView:cellForRowAtIndexPath: метод:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = @"Cell";

    UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
    cell.accessoryView = iv;
    [iv release];

    // cell.accessoryView.hidden = YES; // works
    cell.accessoryView.alpha = 0.5f;    // fails

    return cell;
}

Как вы уже догадались, accessoryView полностью непрозрачен. Я что-то пропустил? Я не могу найти никакой информации о том, что здесь происходит.

Спасибо!

Ответы [ 8 ]

5 голосов
/ 08 мая 2013

Может быть, вы можете сделать это в willDisplayCell:

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.accesoryView.alpha = 0.4;
}
3 голосов
/ 19 сентября 2009

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

2 голосов
/ 30 января 2013

Вы можете изменить альфа в - (void) layoutSubviews подкласса UITableViewCell, установив

- (void) layoutSubviews
{
     self.accessoryView.alpha = 0.4;
}

ура

0 голосов
/ 23 июня 2016

Вы можете изменить оттенок цвета - чтобы манипуляции меняли цвет по умолчанию accessotyView. В ячейку подкласса и в место, где изменяется colorize BOOL _myOption, добавьте что-то вроде этого:

self.tintColor = [self.window.tintColor colorWithAlphaComponent:_myOption?1.0:0.5];

Вы можете выбрать любой другой цвет, а не только изменить его по альфа-значению.

0 голосов
/ 31 марта 2015

view1 - вид, который вы хотели бы добавить в качестве аксессуара. Создайте view2 с тем же размером, что и view1. Затем добавьте view1 в качестве subview к view2 и установите альфа view1. Установите view2 как acessoryView для ячейки табличного представления.

0 голосов
/ 07 апреля 2014

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

- (UIImage *)imageByApplyingAlpha:(CGFloat)alpha toImage:(UIImage *)initialImage
{
    UIGraphicsBeginImageContextWithOptions(initialImage.size, NO, 0.0f);

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGRect area = CGRectMake(0, 0, initialImage.size.width, initialImage.size.height);

    CGContextScaleCTM(ctx, 1, -1);
    CGContextTranslateCTM(ctx, 0, -area.size.height);

    CGContextSetBlendMode(ctx, kCGBlendModeMultiply);

    CGContextSetAlpha(ctx, alpha);

    CGContextDrawImage(ctx, area, initialImage.CGImage);

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage;
}
0 голосов
/ 06 сентября 2012

В тот момент, когда вы пытаетесь установить accessoryView.alpha, вы можете разместить этот код:

UIView *accessoryMask = [[UIView alloc] initWithFrame:cell.accessoryView.frame];
accessoryMask.backgroundColor = [UIColor blackColor]; // or whiteColor
accessoryMask.alpha = 0.5;
accessoryMask.userInteractionEnabled = FALSE;
[cell.accessoryView addSubview:accessoryMask];
[accessoryMask release];

Это должно работать хорошо, если ваши ячейки имеют простой черный или белый фон. Вы можете установить маску так, чтобы она соответствовала другим цветам фона, но тогда ваш accessoryView будет окрашен.

Преимущество перед добавлением подпредставления в contentView заключается в том, что вам не нужно беспокоиться о позиционировании представления; iOS будет позиционировать accessoryView по мере необходимости, и ваша маска будет следовать за ним.

0 голосов
/ 17 сентября 2009

Вы пробовали также установить его фоновый цвет, чтобы очистить цвет? Примерно так:

cell.accessoryView.backgroundColor = [UIColor clearColor];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...