是否可以设置 UITableViewCellaccessoryView 的 alpha 属性?

问题描述 投票:0回答:8

我使用

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
是完全不透明的。我错过了什么吗?我找不到任何有关这里发生的事情的信息。

谢谢!

iphone
8个回答
3
投票

在尝试了大约十亿种不同的事情并到处寻找答案之后,我最终只是通过向单元格的 contentView 添加子视图并将其定位到附件位置来伪造它。我可以根据自己的喜好设置该子视图的 alpha 属性。


3
投票

您可以通过设置来更改子类 UITableViewCell 的

- (void) layoutSubviews
中的 alpha

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

干杯


3
投票

也许你可以在 willDisplayCell 中做到这一点:

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

2
投票

您可以更改色调颜色 - 该操作会更改默认 accessotyView 的颜色。子类单元格并在更改 colorize

BOOL _myOption
的位置添加如下内容:

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

你可以选择任何其他颜色,而不仅仅是通过alpha值来改变它。


0
投票

在您尝试设置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 将根据需要定位配件视图,并且您的遮罩将跟随它。


0
投票

您是否也尝试将其背景颜色设置为透明颜色? 像这样的东西:

cell.accessoryView.backgroundColor = [UIColor clearColor];

0
投票

也许晚了,但至少对我来说有效的方法是使用此方法(作为类中的类别或助手)动态地将 alpha 直接应用于图像:

- (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
投票

view1 - 您想要添加为附件的视图。 创建一个与 view1 大小相同的 view2。然后将view1作为子视图添加到view2,并设置view1的alpha。将 view2 设置为 tableview 单元格的 acessoryView。

© www.soinside.com 2019 - 2024. All rights reserved.