代码之家  ›  专栏  ›  技术社区  ›  No Surprises

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

  •  12
  • No Surprises  · 技术社区  · 15 年前

    我用的是一个 UIImageView accessoryView 在一个 UITableViewCell 辅助视图 alpha 属性,但它不起作用。我可以设置 hidden opaque 没有问题的属性,但是 阿尔法

    我尝试创建一个新项目,其中包含一个 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 回复  |  直到 15 年前
        1
  •  3
  •   No Surprises    15 年前

    在尝试了10亿种不同的方法并到处寻找答案后,我最终只是通过在单元格的contentView中添加一个子视图并将其定位到附件位置来伪造它。我可以将该子视图上的alpha属性设置为我的核心内容。

        2
  •  3
  •   naydin    11 年前

    -(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        cell.accesoryView.alpha = 0.4;
    }
    
        3
  •  2
  •   user2025961    11 年前

    您可以在中更改alpha - (void) layoutSubviews 通过设置创建子类UITableViewCell的

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

    干杯

        4
  •  1
  •   Sound Blaster    8 年前

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

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

        5
  •  0
  •   arlomedia    12 年前

    在尝试设置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,您的掩码将跟随它。

        6
  •  0
  •   Adrian P ddr    11 年前

    大概是这样的:

    cell.accessoryView.backgroundColor = [UIColor clearColor];
    
        7
  •  0
  •   Chris K.    10 年前

    也许晚了,但至少对我来说,一种有效的方法是通过使用此方法(作为类中的类别或帮助者)将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;
    }
    
        8
  •  0
  •   Peter Robert    9 年前