2010-08-16 12 views
25

A:Subview'ı cell.contentView'a nasıl eklemeliyim? (Hücre yeni oluşturulur)

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

     CGRect frame = CGRectMake(0, 0, 160, 50); 
     UILabel *label = [[UILabel alloc] initWithFrame:frame]; 
     label.textAlignment = UITextAlignmentRight; 
     label.text = @"9:00am"; 
     [cell.contentView addSubview:label]; 
     [label release]; 
    } 

    return cell; 
} 

veya B (hücre bulunan her zaman):

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

    CGRect frame = CGRectMake(0, 0, 160, 50); 
    UILabel *label = [[UILabel alloc] initWithFrame:frame]; 
    label.textAlignment = UITextAlignmentRight; 
    label.text = @"9:00am"; 
    [cell.contentView addSubview:label]; 
    [label release]; 

    return cell; 
} 

A ya da B? Teşekkürler!

GÜNCELLEME Çözüm (cevaplar için teşekkürler): Eğer A hücreyi oluştururken

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

    static NSString *CellIdentifier = @"Cell";  
    UILabel *label; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

     CGRect frame = CGRectMake(0, 0, 160, 50); 
     label = [[UILabel alloc] initWithFrame:frame]; 
     label.textAlignment = UITextAlignmentRight; 
     label.tag = 1; 
     [cell.contentView addSubview:label]; 
     [label release]; 
    } else { 
     label = (UILabel *) [cell viewWithTag:1]; 
    } 

    label.text = [NSString stringWithFormat:@"%d", [indexPath row]]; 

    return cell; 
} 

cevap

11

Performansla ilgili her şey. A ile hücreyi tüm alt görünümleri ile yeniden kullanırsınız, B ile, yalnızca ham hücreyi yeniden kullanır ve her yinelemede yeni bir alt görünüm eklersiniz; bu IMHO, A: performans kadar iyi değildir.

Ben UITableView alt sınıf veya kullanım çözüm A. performansının yanı sıra

+0

yapar B nedeni bellek sızıntısı oluşturabilir ya demek? – ohho

+0

@ohho, Düşünme. Her şey bana iyi görünüyor. –

+3

B, hücreye etiket eklemeye devam etmiyor mu? Biraz kaydırma yaptıktan sonra, alt gösterimlerinde birden fazla etiket tutan birden fazla hücre ile sonuçlanacağını düşünüyorum. Yanılıyorsam lütfen beni düzeltin. – Mike

11

Yalnızca bununla vb etiketleri gibi her zaman değer atayabilirsiniz, alt görünümleri eklemek gerekir B.

Kendi alt görünümlerinize ekleyen kendi alt sınıfınızı oluşturduğunuz UITableViewCell'i oluşturursanız, bu çözüm doğal olarak düşecektir.

Böyle bir şey.

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

     CGRect frame = CGRectMake(0, 0, 160, 50); 
     UILabel *label = [[UILabel alloc] initWithFrame:frame]; 
     label.textAlignment = UITextAlignmentRight; 
     [cell.contentView addSubview:label]; 
     [label release]; 
    } 

    // Get a reference to the label here 

    label.text = @"9:00am"; 

    return cell; 
} 

yalnızca bir kez alt görüşlerini tahsis performans yararlanmak ve gerektiğinde sadece subview üzerinde uygun özelliklerini ayarlayabilirsiniz Bu şekilde.

İlgili konular