2012-08-13 22 views
19

UITableViewCell alt sınıfım var. Alt sınıfım birkaç UILabel s içeriyor. Alt sınıfımın bu etiketleri, her tablo görüntüleme hücresine uygulanan bazı varsayılan ayarlara başlamasını istiyorum.Neden initWithCoder öğeleri doğru şekilde başlatmıyor?

Bunun için initWithCoder kullanmalıyım. initWithCoder fonksiyonum çağrılıyor ve fonksiyonumdaki her satırdan geçebiliyor ve hareketlerin içinden geçiyor gibi görünüyor. Uygulamamı çalıştırdığımda, uygulanan özelliklerden hiçbirini göremiyorum. En belirgin olarak, yazı tipi değiştirilmiyor. Sadece benim UILabel s üzerinde değiştirdiğim özelliklerin hiçbirinin kaydedilmediğini veya görüntülenmediğini düşünmüyorum.

Bu alt sınıfı Storyboard ile birlikte kullanıyorum. Değişikliklerimin Storyboard'a yansıtılmayacağını biliyorum, ancak uygulama çalıştırıldığında da kodlarıma yansıtılmıyorlar - kodum yürütülmesine rağmen.

Düzenleme: initWithCoder'u geçersiz kılmaya çalışmadan önce, bu alt sınıflarda bu mantığı çalıştıracağım örnek yöntemim olduğunu belirtmek istedim. Bu örnek yöntemini cellForRowAtIndexPath içinde çağırırım. Bu yöntem çalışıyordu, ancak bu alt sınıfa otomatik olarak bu mantığa sahip olmanın kullanışlı olacağını düşündüm.

Herhangi bir fikrin var mı? Benim kod aşağıda:

#import "ThreadListCell.h" 

@implementation ThreadListCell 

- (id)initWithCoder:(NSCoder *)aDecoder { 

    if ((self = [super initWithCoder:aDecoder])) { 

     // adjust the font settings of the title 
     self.title.font = [UIFont fontWithName:@"SourceSansPro-Black" size:16]; 
     self.title.textColor = [UIColor colorWithWhite:0.267f alpha:1.0f]; 

     // adjust the font settings of the subtitle 
     self.text.font = [UIFont fontWithName:@"SourceSansPro-Light" size:14]; 
     self.text.textColor = [UIColor colorWithWhite:0.267f alpha:0.9f]; 
     self.text.textColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:1]; 

     // adjust the font settings of the location 
     self.location.font = [UIFont fontWithName:@"SourceSansPro-Light" size:8]; 
     self.location.textColor = [UIColor colorWithWhite:0.267f alpha:0.9f]; 

     // adjust the UILabel settings of the title 
     self.title.numberOfLines = 0; 
     self.title.lineBreakMode = UILineBreakModeTailTruncation; 

     // adjust the UILabel settings of the subtitle 
     self.text.numberOfLines = 0; 
     self.text.lineBreakMode = UILineBreakModeTailTruncation; 

     // adjust the UILabel settings of the location 
     self.location.numberOfLines = 0; 
     self.location.lineBreakMode = UILineBreakModeTailTruncation; 
     self.location.textAlignment = UITextAlignmentRight; 

    } 

    return self; 

} 

@end 

Ve başlık: mesajını aldığınızda sizin IBOutlets ait

#import <UIKit/UIKit.h> 

@interface ThreadListCell : UITableViewCell 

@property (nonatomic, weak) IBOutlet UILabel *text; 
@property (nonatomic, weak) IBOutlet UILabel *title; 
@property (nonatomic, weak) IBOutlet UILabel *location; 

@end 

cevap

45

Yok ayarlanır - Eğer "awakeFromNib" veya "viewDidLoad" kullanmak gerekir - öyle bir şey - satış noktalarına erişmek için. Bu, initWithCoder'da başka çıkış-dışı şeyler ayarlayabilirsiniz.

+1

Oh, tamam. 'InitWithCoder' ile' awakeFromNib' arasında değişiklik yapılması beklenen şekilde çalışıyor gibi görünüyor. Çok teşekkürler! – Ryan

+0

"awakeFromNib", cellForRowAtIndexPath işlevindeki özelliklerimden herhangi birini ayarlamadan önce gerçekleşir. Bu bana örnek yöntemimin daha iyi bir yaklaşım olduğunu düşünmemi sağlıyor, çünkü bir UILabel, vb. Içindeki mevcut metne dayanarak yeniden boyutlandırma işlemlerini güvenilir bir şekilde gerçekleştirebiliyorum. – Ryan

+3

Sipariş şu şekilde olmalıdır: initWithCoder, awakeFromNib, cellForRowAtIndexPath. Bazı matematik değerlerini "önceden" ayarlamanız gerekiyorsa, bunu init rutininde yapabilirsiniz. Ancak, hazne yüklenene kadar çıkışlarınıza erişemezsiniz. –

İlgili konular