现在我有一个名为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链接到视图时我做错了吗?我错过了什么?感谢。
答案 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 并在其中初始化标签。