iOS自定义视图文本标签为零

时间:2014-07-20 22:31:34

标签: ios objective-c uiview xib

现在我有一个名为OTGMarkerDetailView的自定义视图类,它继承自UIView和相应的.xib。它只有两个文本标签,我将文本标签链接到OTGMarkerDetailView.m中的文本标签IBOutlets。

OTGMarkerDetailsView.h:

#import <UIKit/UIKit.h>

@interface OTGMarkerDetailView : UIView

- (void)setLabelsWithMainAddress:(NSString *)mainAddress subAddress:(NSString *)subAddress;

@end

OTGMarkerDetailView.m

#import "OTGMarkerDetailView.h"

@interface OTGMarkerDetailView ()

@property (nonatomic, strong) IBOutlet UILabel *mainAddressLabel;
@property (nonatomic, strong) IBOutlet UILabel *subAddressLabel;

@end

@implementation OTGMarkerDetailView

- (void)setLabelsWithMainAddress:(NSString *)mainAddress subAddress:(NSString *)subAddress {
    NSLog(@"%@", self.mainAddressLabel.text);
    self.mainAddressLabel.text = mainAddress;
    self.subAddressLabel.text = subAddress;
    NSLog(@"%@", self.mainAddressLabel.text);
}

@end

我使用initWithFrame将其作为子视图加载到另一个视图中。但是当我尝试设置文本标签值时,控制台总是记录为null,当我使用断点时,似乎mainAddressLabel和subAddressLabel本身都是nil。将xib链接到视图时我做错了吗?我错过了什么?感谢。

2 个答案:

答案 0 :(得分:3)

我找到了一个解决方法。我创建了一个自定义的UIView。

1。 我在 initWithFrame 方法

中附加了Nib文件
CustomView *nibView;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil];
        nibView = [array objectAtIndex:0];
        [self addSubview:nibView];

    }
    return self;
}

你可以清楚地看到,我没有创建UIView的实例,而是创建了相同类类型的nibView。

2。 现在创建IBOutlet属性并对其进行处理。在customView.m文件中。

@interface FTEndorsedExpandedView : UIView

     @property (retain) IBOutlet UILabel *label;

@end

3。 创建函数以设置标题或更改属性。 (在customView.m文件中)。使用 nibView 访问属性,而不是使用 self.label

-(void)setLabelText:(NSString*)string{
    [nibView.label setText:string];
}

答案 1 :(得分:1)

使用 initWithFrame 在另一个视图中创建自定义视图时,会创建自定义类的新实例。此实例与接口构建器中的实例不同,因此对于此新创建的实例,标签属性为nil。要解决此问题,请将视图放在界面构建器中的父视图中并附加其连接,或者覆盖自定义视图的 initWithFrame 并在其中初始化标签。