Ios 如何访问视图中的子视图';initWithCoder方法

Ios 如何访问视图中的子视图';initWithCoder方法,ios,view,subview,Ios,View,Subview,我有一个自定义视图,其中包含两个UILabel。之前我想定制他们的字体,所以我在initWithCoder方法中做了这件事 @implementation HomeTitleView @synthesize ticketLabel; @synthesize monthLabel; - (id) initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; if (self) {

我有一个自定义视图,其中包含两个UILabel。之前我想定制他们的字体,所以我在initWithCoder方法中做了这件事

@implementation HomeTitleView
@synthesize ticketLabel;
@synthesize monthLabel;

- (id) initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [monthLabel setFont:[UIFactory getFontForKey:@"home_month"]];
        [ticketLabel setFont:[UIFactory getFontForKey:@"home_ticket"]];
    }
    return self;
}

@end

不幸的是,这没有起作用。使用调试器,我发现monthLabel和ticketLabel都是零。有人知道我该怎么解决这个问题吗?我应该实现什么样的回调或方法才能访问这两个标签?

您是否将monthLabel和ticketLabel分配给UILabel?比如:

self.monthLabel = [[[UILabel alloc] init] autorelease];
self.ticketLabel = [[[UILabel alloc] init] autorelease];

如果是这样,你能用代码更新你的帖子吗?

你有没有给UILabel分配过monthLabel和ticketLabel?比如:

self.monthLabel = [[[UILabel alloc] init] autorelease];
self.ticketLabel = [[[UILabel alloc] init] autorelease];

如果是这样,你能用代码更新你的帖子吗?

你不能这么做。这些观点还不存在。它们在调用
loadView
方法时被实例化,这在首次访问
view
属性时自动发生。如果要在加载视图后操作视图,正确的方法是
viewDidLoad


编辑:假设您使用的是
UIViewController
类。如果您使用的是
UIView
类,则可以使用
awakeFromNib
didAddSubview:

您不能这样做。这些观点还不存在。它们在调用
loadView
方法时被实例化,这在首次访问
view
属性时自动发生。如果要在加载视图后操作视图,正确的方法是
viewDidLoad


编辑:假设您使用的是
UIViewController
类。如果您使用的是
UIView
类,那么如果调用的指定初始化器是
initWithCoder:
,则可以使用
awakeFromNib
didAddSubview:

,然后这意味着他正在使用nib或故事板-当该文件中的对象被反序列化时,视图将被实例化。如果指定的初始化器被调用为
initWithCoder:
,那么这意味着他正在使用nib或故事板-当该文件中的对象被反序列化时,视图将被实例化。我怎么做?我的customview扩展了UIView,它没有viewDidLoad回调。或者我应该在视图控制器的viewDidLoad中添加这个customview吗?我现在可以想到的另一个可能的解决方案是创建一个自定义UILabel类,我可以在它的init方法中配置外观。。。但如果可能的话,我不想这么做:(对不起,我假设您谈论的是
UIViewController
子类。我已经更新了答案,以包含
UIView
子类的信息。我该怎么做?我的customview扩展了没有viewDidLoad回调的UIView。或者我应该在viewDidLoad中添加此customview到的视图控制器?否她可能的解决方案是创建一个自定义UILabel类,我可以在它的init方法中配置外观……但如果可能的话,我不想这样做:(抱歉,我假设您谈论的是
UIViewController
子类。我已更新了答案,以包含
UIView
子类的信息。