2009-10-01 20 views
8

Tôi sử dụng một UITableViewCell tùy chỉnh từ một ngòi bút. Chế độ xem phụ kiện là Chỉ báo tiết lộ chi tiết. Vấn đề là màu nền của UITableViewCell phía sau khung nhìn phụ kiện không được hiển thị (xem hình ảnh/nguồn bên dưới). Bất kì manh mối nào? Ngoài ra, đây là một số điều mà tôi đã cố gắng nhưng đã không làm việc:Làm thế nào để có được Xem phụ kiện trong suốt trong UITableViewCell? (w/Ảnh chụp màn hình)

Những điều đó đã không làm việc:
- Thiết lập backgroundColor của quan điểm phụ kiện để clearColor
- Thiết lập contentView.opaque của tế bào để FALSE
- Thiết lập contentView.opaque của bảng Xem FALSE
- Đặt chế độ xem phụ kiện không mặc định cho các tế bào


alt text http://www.chicknchoke.com/so/IMG_8028.png

-(void)showTablePrep 
    { 
     myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 480, 320, 416) style:UITableViewStylePlain]; 
     myTableView.dataSource = self; 
     myTableView.delegate = self; 
     myTableView.delaysContentTouches = FALSE; 
     myTableView.opaque = FALSE; 
     myTableView.rowHeight = 60; 

     [UIView beginAnimations:@"SlideUp" context:nil]; 
     [UIView setAnimationDuration:0.3f]; 

     [myTableView setCenter:CGPointMake(myTableView.center.x, myTableView.center.y-436)]; 
     [self.view addSubview:myTableView]; 
     [self.view bringSubviewToFront:myTableView]; 

     [UIView commitAnimations]; 


    } 




- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    FriendsCell* cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCellID"]; 

    if (cell == nil){ 

     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FriendsCellView" owner:self options:nil]; 

     cell = (FriendsCell*)[nib objectAtIndex:0]; 

     if(indexPath.row % 2 == 0){ 

     cell.contentView.backgroundColor = [UIColor grayColor]; 


     }else{ 

     cell.contentView.backgroundColor = [UIColor lightGrayColor]; 


     } 
     cell.accessoryView.backgroundColor = [UIColor clearColor]; 
     cell.contentView.opaque = FALSE; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 


    if(f 

riendsCounter > indexPath.row){ 


      cell.titleLabel.text = @"Label"; 
      cell.descLabel.text = @"Description goes here"; 

     }else{ 

      cell.titleLabel.text = @""; 
      cell.descLabel.text = @""; 
      cell.accessoryType = UITableViewCellAccessoryNone; 

     } 

     } 

     return cell;  
    } 

Trả lời

11

Bạn đang vẽ màu nền cho ô của mình không chính xác. A UITableViewCell sẽ được sắp xếp sao cho các cạnh contentViewaccessoryView cạnh nhau. (Điều này được thực hiện sao cho contentView có thể cắt nội dung của nó sao cho nó không chồng chéo với giao diện phụ kiện) Vấn đề không phải là chế độ xem phụ kiện mờ đục, đó là nền màu xám đơn giản không được vẽ phía sau màn hình phụ kiện.

Cách đúng để tùy chỉnh nền được vẽ phía sau UITableViewCell là tùy chỉnh backgroundView. Tôi chưa thử điều này, nhưng vì bạn chỉ thay đổi màu sắc, bạn có thể chỉ cần đặt màu backgroundColor trên backgroundView thành màu mong muốn của mình.

+0

Tôi cũng muốn đề cập rằng có một tổng quan thực sự tuyệt vời về việc tùy chỉnh bản vẽ 'UITableView' tại đây: http://cocoawithlove.com/2009/04/easy-custom-uitab leview-drawing.html – Alex

+7

Làm việc này cho tôi: ô.backgroundView = [[Phân bổ UIView] init]; cell.backgroundView.backgroundColor = [UIColor yellowColor]; – joshaidan

+1

@joshaidan Đừng quên phát hành chế độ xem bạn đã tạo (trừ khi bạn sử dụng ARC): cell.backgroundView = [[[UIView alloc] init] autorelease]; – manicaesar

1

Tôi đã tìm thấy câu trả lời bằng cách xem xét các bản xem trước của ô xem bảng tùy chỉnh của tôi.

Có vẻ như chế độ xem phụ kiện có nút nằm trên đó. Bằng cách tìm nút này trong các bản xem trước và thay đổi màu của nó, tôi đã có thể cập nhật màu nền sau nút phụ kiện.

<UIButton: 0x3b4d690; frame = (277 0; 43 75); opaque = NO; layer = <CALayer: 0x3b3e0b0>> 

for (UIView *aSubView in self.subviews) { 
    if ([aSubView isMemberOfClass:[UIButton class]]) { 
     aSubView.backgroundColor = [UIColor greenColor]; 
    } 
} 

Đáng tiếc là tôi chỉ có thể đạt đến nút này trong phương pháp

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 

của bảng tùy chỉnh lớp view di động của tôi. Tôi đã sử dụng thành công ứng dụng này trong ứng dụng của mình để hiển thị màu đánh dấu khác khi người dùng chọn một ô. Điều này sẽ chỉ cho bạn đi đúng hướng.

0

tôi giải quyết vấn đề này trên iOS7 nhưng thêm

[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

trong

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

và bạn thay đổi nền của bạn và bakcgrounds khác tại đây:

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    return YES; 
} 

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Add your Colour. 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [cell setBackgroundColor:[UIColor colorWithHexColor:HIGHLIGHT_COLOR]]; 
} 

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Reset Colour. 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [cell setBackgroundColor:[UIColor colorWithHexColor:UNHIGHLIGHT_COLOR]]; 
} 
Các vấn đề liên quan