2011-07-24 67 views
2

所以我知道這是被問了一百萬次。也許我太累了,但我不知道爲什麼這個標籤文本不會更新。我的繼承人代碼標籤將不會顯示文本後繼承UITableViewCell

CustomCell.h

#import <UIKit/UIKit.h> 


@interface CustomCell : UITableViewCell { 
    UILabel *mainLabel; 
    UILabel *leftBottomLabel; 
    UILabel *rightBottomLabel; 

} 


@property (nonatomic, retain) UILabel *mainLabel; 
@property (nonatomic, retain) UILabel *leftBottomLabel; 
@property (nonatomic, retain) UILabel *rightBottomLabel; 


@end 

CustomCell.m

#import "CustomCell.h" 


@implementation CustomCell 

@synthesize mainLabel; 
@synthesize leftBottomLabel; 
@synthesize rightBottomLabel; 



-(id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 

    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { 
     // Initialization code 


     UIView *myContentView = self.contentView; 



     self.mainLabel.textAlignment = UITextAlignmentLeft; 
     [myContentView addSubview:self.mainLabel]; 
     [self.mainLabel release]; 



     self.leftBottomLabel.textAlignment = UITextAlignmentLeft; 
     [myContentView addSubview:self.leftBottomLabel]; 
     [self.leftBottomLabel release]; 


     self.rightBottomLabel.textAlignment = UITextAlignmentLeft; // default 
     [myContentView addSubview:self.rightBottomLabel]; 
     [self.rightBottomLabel release]; 
    } 


    return self; 
} 


- (void)layoutSubviews { 

    [super layoutSubviews]; 


    CGRect contentRect = self.contentView.bounds; 
    CGFloat boundsX = contentRect.origin.x; 
    CGRect frame; 


     frame = CGRectMake(boundsX + 10, 4, 200, 20); 
     self.mainLabel.frame = frame; 
     self.mainLabel.backgroundColor = [UIColor redColor]; 

     frame = CGRectMake(boundsX + 10, 28, 200, 20); 
     self.leftBottomLabel.frame = frame; 
     self.leftBottomLabel.backgroundColor = [UIColor greenColor]; 


     frame = CGRectMake(boundsX + 100, 28, 200, 14); 
     self.rightBottomLabel.frame = frame; 
     self.rightBottomLabel.backgroundColor = [UIColor blueColor]; 

} 



- (void)dealloc { 

    [mainLabel dealloc]; 
    [leftBottomLabel dealloc]; 
    [rightBottomLabel dealloc]; 
    [super dealloc]; 
} 

@end 

MyView.m

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

    static NSString *CellIdentifier = @"Cell"; 

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 

    cell.mainLabel.text = @"Hello"; 
return cell; 
} 

有什麼想法?我在這個標籤裏什麼都沒得到,不知道爲什麼。

+0

這可能與您的問題無關,但您應該在dealloc方法中的標籤上調用release,而不是dealloc。 – Joe

+0

OMG你是對的。謝謝。 – Clay

回答

3

您需要先初始創建每三個標籤,然後才能更改其屬性或獲取任何屏幕繪圖。目前,這三個標籤只被宣佈。要解決,你initWithStyle:reuseIdentifier:,加上頂部的下列內容:

self.mainLabel = [[UILabel alloc] init]; 
self.leftBottomLabel = [[UILabel alloc] init]; 
self.rightBottomLabel = [[UILabel alloc] init]; 

layoutSubviews代碼將處理框架的變化(這就是爲什麼你不需要[[UILabel alloc] initWithFrame..]初始化,你自己以後設置框架)「在適當的時間,你的標籤現在應該正確顯示。

+0

OMG非常感謝你......這就是我在上午凌晨處理代碼的過程。這工作。 – Clay

+0

如果這個答案是正確的,請標記爲正確。 –

+0

完成並完成。謝謝。 – Clay

1

你似乎從來沒有真正創建過標籤。

你在你的初始化代碼需要

mailLabel = [[UILabel alloc] initwithframe...]