是否可以设置UITableViewCell accessoryView的alpha属性?

时间:2009-09-17 00:07:29

标签: iphone

我在UIImageView中使用accessoryView作为我正在以编程方式创建的UITableViewCell。我已经尝试了所有我能想到的设置accessoryView的{​​{1}}属性,但它不起作用。我可以毫无问题地设置alphahidden属性,但是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; } 完全不透明。我错过了什么吗?我找不到任何关于这里发生了什么的信息。

谢谢!

8 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

在尝试了大约十亿种不同的东西并且到处寻找一些答案后,我最终只是通过在单元格的contentView中添加子视图并将其定位到附件位置来伪装它。我能够将该子视图的alpha属性设置为我心中的内容。

答案 2 :(得分:2)

您可以通过设置

来更改子类UITableViewCell的- (void) layoutSubviews中的alpha
- (void) layoutSubviews
{
     self.accessoryView.alpha = 0.4;
}

欢呼声

答案 3 :(得分:0)

您是否尝试将其背景颜色设置为清晰颜色? 像这样:

cell.accessoryView.backgroundColor = [UIColor clearColor];

答案 4 :(得分: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将根据需要定位accessoryView,你的面具将跟随它。

答案 5 :(得分: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;
}

答案 6 :(得分:0)

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

答案 7 :(得分:0)

您可以更改色调颜色 - 操作会更改默认accessotyView的颜色。子类单元格以及更改着色BOOL _myOption的位置添加如下内容:

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

您可以选择任何其他颜色,而不仅仅是按Alpha值更改颜色。