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

时间:2013-01-02 16:19:57

标签: ios uiview

我有一个从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。

2 个答案:

答案 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。