2009-09-17 22 views
11

Tôi đang sử dụng UIImageView làm accessoryView trong một UITableViewCell mà tôi đang tạo theo chương trình. Tôi đã thử mọi thứ tôi có thể nghĩ đến để thiết lập thuộc tính alpha của accessoryView, nhưng nó không hoạt động. Tôi có thể đặt các thuộc tính hiddenopaque không có vấn đề gì, nhưng alpha đang ghét tất cả tôi.Có thể đặt thuộc tính alpha của phụ kiện UITableViewCell không?

tôi đã cố gắng tạo ra một dự án mới có chứa một đơn UITableViewControllertableView:cellForRowAtIndexPath: phương pháp sau đây:

- (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; 
} 

Như bạn có thể đoán, các accessoryView là hoàn toàn mờ đục. Tui bỏ lỡ điều gì vậy? Tôi không thể tìm thấy bất kỳ thông tin về những gì đang xảy ra ở đây.

Cảm ơn!

+0

chỉ cần chạy vào điều này quá sau khi rối tung với nó trong khoảng một nửa giờ cho đến khi tôi đã bỏ cuộc. vui mừng khi thấy tôi không đơn độc. : D cảm ơn vì đã đăng cách giải quyết. mặc dù vậy! – taber

+0

Điều này vẫn không thể cài đặt được trong iOS 5.1. Tôi cũng đã thử cài đặt alpha của UIImageView trước khi đặt nó làm accessoryView, nhưng điều đó cũng không làm gì cả. – arlomedia

Trả lời

3

Sau khi thử về một tỷ thứ khác nhau và tìm kiếm khắp mọi nơi cho một số câu trả lời, tôi đã kết thúc chỉ giả mạo nó bằng cách thêm một subview để contentView của tế bào và định vị nó đến vị trí phụ kiện. Tôi có thể đặt thuộc tính alpha trên tiểu sử đó cho nội dung của trái tim tôi.

+0

Tôi đã làm một cái gì đó tương tự, ngoại trừ tôi nướng minh bạch vào một hình ảnh và tiếp tục sử dụng xem phụ kiện. – Fostah

0

Bạn đã thử đặt màu nền của nó để xóa màu không? Something như thế này:

cell.accessoryView.backgroundColor = [UIColor clearColor]; 
+0

Có; không giúp được gì. : -/ –

0

Tại điểm mà bạn đang cố gắng để thiết lập accessoryView.alpha, bạn có thể đặt mã này:

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]; 

này nên làm việc tốt miễn là các tế bào của bạn có một nền trắng đen hoặc đồng bằng đồng bằng. Bạn có thể đặt mặt nạ của mình để phù hợp với các màu nền khác, nhưng sau đó, phụ kiện của bạn sẽ được tô màu.

Lợi thế hơn việc thêm xem phụ vào contentView là bạn không phải lo lắng về việc định vị chế độ xem; iOS sẽ định vị accessoryView khi cần thiết và mặt nạ của bạn sẽ theo dõi nó.

+0

Không hoạt động cho tôi .. – nemesis

2

bạn có thể thay đổi alpha trong - (void) layoutSubviews của một UITableViewCell subclassed bằng cách thiết lập

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

cổ vũ

+0

và nếu bạn muốn thay đổi nó trong thời gian chạy? – nemesis

5

lẽ bạn có thể làm điều đó trong willDisplayCell:

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

Cảm ơn! Điều tôi đang tìm kiếm. ;) – nemesis

+1

Cảm ơn! Trong trường hợp của tôi, tôi đang tìm 'cell.contentView.alpha' thay thế. – pimguilherme

+0

Điều này dường như không hoạt động đối với tôi trên iOS 10. – Fostah

0

lẽ muộn, nhưng một cách tiếp cận đó là đối với tôi ít nhất là làm việc là để áp dụng alpha trực tiếp cho hình ảnh động bằng cách sử dụng phương pháp này (như thể loại hoặc helper trong lớp):

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

chế độ xem1 - chế độ xem bạn muốn thêm làm phụ kiện. Tạo chế độ xem 2 có cùng kích thước với chế độ xem1. Sau đó, thêm view1 làm subview để view2, và thiết lập alpha của view1. Đặt view2 là acessoryView cho ô xem bảng.

0

Bạn có thể thay đổi tông màu - thao tác này thay đổi màu của accessotyView mặc định.tế bào phân lớp và ở nơi colorize BOOL _myOption được thay đổi thêm một cái gì đó như thế này:

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

Bạn có thể chọn bất kỳ màu nào khác, không chỉ thay đổi nó bằng giá trị alpha.

Các vấn đề liên quan