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
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
"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
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. –