我有一个从xib文件加载的自定义UIView(MyView)对象。在MyView.m中,我有一个在initWithCoder中调用的方法,它执行一些初始化。这在很大程度上起作用,但是我试图在这里设置一些IBOutlet标签属性中的文本,但它没有用,我意识到因为此时属性没有初始化。
我尝试在drawRect方法中设置出口的文本,它确实有效。但我想如果你不需要可以导致一些性能命中,我会读到实现drawRect。我的问题是,设置IBOutlet标签属性文本的最佳位置在哪里? (我实际上正在做的是将它设置为xib中的内容版本。我知道本地化的xib文件,但我想在代码中设置文本。)
这是一些代码。以下是我在视图控制器中初始化视图的方法:
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyView"
owner:self
options:nil];
_myView = [nibContents objectAtIndex:0];
这是MyView.m中的initWithCoder方法
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
[self localizeLabels];
}
return self;
}
这是localizeLabels方法:
- (void)localizeLabels
{
self.powerPlant.text = NSLocalizedString(@"POWERPLANTBREAKDOWN_HEADERCOLUMN1", nil);
self.output.text = NSLocalizedString(@"POWERPLANTBREAKDOWN_HEADERCOLUMN2", nil);
self.capacity.text = NSLocalizedString(@"POWERPLANTBREAKDOWN_HEADERCOLUMN3", nil);
}
我已经检查过使用断点调用这些方法,并且localizeLabels方法中的属性为nil。
答案 0 :(得分:2)
<强>已更新强>:
你的MyView.m
课程在开始时应该是这样的。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyView"
owner:self
options:nil];
UIView *_myView = [nibContents objectAtIndex:0];
[self addSubview: _myView];
[self localizeLabels];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
[self localizeLabels];
}
return self;
}
并在viewcontroller
中。您需要initialize
这样的MyView
。
MyView _view = [[MyView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
[self.view addSubview:_view];
答案 1 :(得分:0)
如果IBOutlet属性在Interface Builder中正确连接到xib,则已初始化。初始化发生在xib加载到app中时。毕竟,这些属性只是对xib实例化对象的弱引用。
所以我最好的猜测是你没有将IBOutlets连接到它们各自的xib对象 - 请检查Interface Builder。