2009-10-01 30 views
8

Bir uçtan bir özel UITableViewCell kullanıyorum. Aksesuar görünümü bir Detay İfşa Göstergesidir. Sorun, aksesuar görünümünün arkasındaki UITableViewCell'in arka plan renginin işlenmemesidir (aşağıdaki resim/kaynağa bakınız). Herhangi bir ipucu? işe YAPMADIĞIMIZUITableViewCell'de Şeffaf Aksesuar Görünümü nasıl alınır? (w/Ekran Görüntüsü)

şeyler:: Ayrıca, burada Denedim ama işe ETMEDİ bazı şeyler
- clearColor
için aksesuar bakış backgroundColor Ayarlama - hücrenin için contentView.opaque Ayarlama YANLIŞ
- hücresine


için varsayılan olmayan aksesuar görünüm ayarlamak - YANLIŞ
için Tablo view contentView.opaque Ayarı

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

cevap

11

Sen yanlış hücre için arka plan rengini çekiyorsun. UITableViewCell, contentView ve accessoryView'un yan yana oturması için düzenlenecektir. (Bu, contentView'un içeriğinin aksesuar görünümü ile örtüşmemesi için kırpılabileceği şekilde yapılır) Sorun, aksesuar görünümünün opak olmaması değil, gri arkaplanın aksesuar görünümünün arkasında çizilmemesidir.

UITableViewCell öğesinin arkasına çizilen arkaplanı özelleştirmenin doğru yolu, backgroundView ürününü özelleştirmektir. Bunu denemedim, ancak sadece rengi değiştirdiğinizden,renklerini backgroundView üzerinde istediğiniz renge ayarlayabilirsiniz.

+0

"UITableView" 'ın çizimini özelleştirmeye gerçekten harika bir genel bakış: http://cocoawithlove.com/2009/04/easy-custom-uitab leview-drawing.html – Alex

+7

Bu, benim için çalıştı: hücresi.backgroundView = [[UIView alloc] init]; cell.backgroundView.backgroundColor = [UIColor yellowColor]; – joshaidan

+1

@joshaidan Oluşturduğunuz görünümü serbest bırakmayı unutmayın (ARC kullanmadıkça): cell.backgroundView = [[[UIView alloc] init] autorelease]; – manicaesar

1

Özel tablo görünümü hücremin alt görünümlerine bakarak cevabı buldum.

Aksesuar görünümü üzerinde oturan bir düğme var gibi görünüyor. Bu düğmeyi alt gösterimlerde bularak ve rengini değiştirerek aksesuar düğmesinin arkasındaki arkaplan rengini güncelleyebildim.

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

Ne yazık ki sadece benim özel Tablo görünümünü hücre sınıfının

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

yöntemi içinde bu düğmeye ulaşmayı başardı. Kullanıcıyı bir hücre seçtiğinde farklı bir vurgu rengini görüntülemek için bu uygulamayı başarılı bir şekilde kullandım. Bu sizi doğru yönde göstermelidir.

0

Bu -iOS7 sorunu ancak ekleyerek

[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

yılında

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

çözmek ve size arka plan ve burada diğer bakcgrounds değiştirin: Ben de var olduğunu belirtmek istedim

- (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]]; 
} 
İlgili konular