我使用
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
是完全不透明的。我错过了什么吗?我找不到任何有关这里发生的事情的信息。
谢谢!
在尝试了大约十亿种不同的事情并到处寻找答案之后,我最终只是通过向单元格的 contentView 添加子视图并将其定位到附件位置来伪造它。我可以根据自己的喜好设置该子视图的 alpha 属性。
您可以通过设置来更改子类 UITableViewCell 的
- (void) layoutSubviews
中的 alpha
- (void) layoutSubviews
{
self.accessoryView.alpha = 0.4;
}
干杯
也许你可以在 willDisplayCell 中做到这一点:
-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.accessoryView.alpha = 0.4;
}
您可以更改色调颜色 - 该操作会更改默认 accessotyView 的颜色。子类单元格并在更改 colorize
BOOL _myOption
的位置添加如下内容:
self.tintColor = [self.window.tintColor colorWithAlphaComponent:_myOption?1.0:0.5];
你可以选择任何其他颜色,而不仅仅是通过alpha值来改变它。
在您尝试设置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 将根据需要定位配件视图,并且您的遮罩将跟随它。
您是否也尝试将其背景颜色设置为透明颜色? 像这样的东西:
cell.accessoryView.backgroundColor = [UIColor clearColor];
也许晚了,但至少对我来说有效的方法是使用此方法(作为类中的类别或助手)动态地将 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;
}
view1 - 您想要添加为附件的视图。 创建一个与 view1 大小相同的 view2。然后将view1作为子视图添加到view2,并设置view1的alpha。将 view2 设置为 tableview 单元格的 acessoryView。