Можно ли установить альфа-свойство 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];
Вы можете выбрать любой другой цвет, а не изменять его по значению альфа.