Ios 在自定义UIView中设置IBOutlet标签的文本

Ios 在自定义UIView中设置IBOutlet标签的文本,ios,uiview,Ios,Uiview,我有一个从xib文件加载的自定义UIView(MyView)对象。在MyView.m中,我有一个在initWithCoder中调用的方法,该方法执行一些初始化。这在很大程度上是可行的,但我试图在这里设置一些IBOutlet标签属性中的文本,但它不起作用,我意识到,因为此时属性尚未初始化 我试着用drawRect方法设置outlets的文本,它确实有效。但我想我读到过,如果不需要的话,实现drawRect可能会导致性能下降。我的问题是,在哪里设置IBOutlet标签属性的文本最合适?(我实际做的是

我有一个从xib文件加载的自定义UIView(MyView)对象。在MyView.m中,我有一个在initWithCoder中调用的方法,该方法执行一些初始化。这在很大程度上是可行的,但我试图在这里设置一些IBOutlet标签属性中的文本,但它不起作用,我意识到,因为此时属性尚未初始化

我试着用drawRect方法设置outlets的文本,它确实有效。但我想我读到过,如果不需要的话,实现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方法中的属性是否为零。

如果IBOutlet属性正确连接到Interface Builder中的xib,则它们将被初始化。在将xib加载到应用程序中时进行初始化。这些属性毕竟只是对xib实例化对象的弱引用

因此,我最好的猜测是,您还没有将IBOutlet连接到它们各自的xib对象-检入Interface Builder

已更新: 您的
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;
}
在您的
视图控制器中
。您需要像这样初始化您的
MyView

MyView _view = [[MyView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
[self.view addSubview:_view];

我知道它们连接正确,因为当我在drawRect中设置它们时,它们确实被设置好了。但是它们没有在initWithCoder方法中为我初始化。@Darren你能告诉我你是如何在initWithCoder:method中初始化值的吗。。你能发布这个方法吗??检查您是否调用了initwithcoder:Method的超类实现这似乎给了我一个无限循环,因为加载nib调用initwithcoder。它还没有开始工作,而且我太忙了,无法返回。别担心,我这个周末会看的,谢谢!