Подтвердить что ты не робот

Почему инициализация элементов initWithCoder не выполняется правильно?

У меня есть подкласс UITableViewCell. Мой подкласс содержит несколько UILabel s. Я хочу, чтобы мой подкласс инициализировал эти метки некоторыми настройками по умолчанию, которые применяются ко всем ячейкам таблицы.

Я читал, что для этого я должен использовать initWithCoder. Моя функция initWithCoder вызывается, и я могу проходить через каждую строку в моей функции и, по-видимому, проходит через движения. Однако, когда я запускаю свое приложение, я не вижу никаких примененных свойств. Наиболее заметно, что шрифт не изменяется. Я просто не думаю, что какие-либо свойства, которые я изменяю на моем UILabel, фактически сохраняются или отображаются.

Я использую этот подкласс в сочетании с Storyboard. Я знаю, что мои изменения не будут отражены в Storyboard, но они также не отражаются при запуске приложения, несмотря на то, что мой код выполняется.

Изменить: я хотел упомянуть, что перед попыткой переопределить initWithCoder у меня был метод экземпляра в этих подклассах, в котором я бы запустил эту логику. Я бы просто вызвал этот метод экземпляра внутри cellForRowAtIndexPath. Этот метод работал, но я подумал, что было бы удобно, чтобы эта логика в этом подклассе возникла автоматически.

Любые идеи? Мой код ниже:

#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

И заголовок:

#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
4b9b3361

Ответ 1

Ни один из ваших IBOutlets не установлен, когда вы получаете сообщение - вам нужно использовать "awakeFromNib" или "viewDidLoad" - что-то вроде этого - для доступа к вашим точкам. Тем не менее, вы можете установить другие не-выходные данные в initWithCoder.