Можно ли установить альфа-свойство UITableViewCell accessoriesView?

Я использую 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 полностью непрозрачен. Я что-то упускаю? Я не могу найти никакой информации о том, что происходит здесь.

Спасибо!

Ответ 1

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

Ответ 2

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

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.accesoryView.alpha = 0.4;
}

Ответ 3

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

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

веселит

Ответ 4

Вы попробовали установить цвет фона для очистки цвета? Что-то вроде этого:

cell.accessoryView.backgroundColor = [UIColor clearColor];

Ответ 5

В тот момент, когда вы пытаетесь установить accessView.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];

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

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

Ответ 6

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

- (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;
}

Ответ 7

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

Ответ 8

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

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

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