iOS 自定义视图文本标签为零
Posted
技术标签:
【中文标题】iOS 自定义视图文本标签为零【英文标题】:iOS Custom View Text Labels Are Nil 【发布时间】:2014-07-20 22:31:34 【问题描述】:现在我有一个名为 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 链接到视图时做错了什么吗?我错过了什么?谢谢。
【问题讨论】:
【参考方案1】:我找到了解决办法。我创建了一个自定义 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];
【讨论】:
【参考方案2】:当您使用 initWithFrame 在另一个视图中创建自定义视图时,会创建自定义类的新实例。此实例与您在界面生成器中的实例不同,因此此新创建的实例的标签属性为零。为了解决这个问题,要么将您的视图放在其附加连接的界面构建器中的父视图中,要么为您的自定义视图覆盖 initWithFrame 并在那里初始化您的标签。
【讨论】:
所以我必须在界面构建器中为我试图添加它的视图添加这个视图?否则,我将不得不手动实例化每个 IBOutlet? 是的,这是选项之一。否则,只需为您的自定义视图覆盖 initWithFrame 并在那里初始化您的标签。 如何利用我在 xib 文件中放置的标签?是否可以不以编程方式创建和放置标签? 为了使用界面生成器来连接你的标签。您必须将子视图放在界面构建器的父视图中。因此,现在您的父视图将拥有您的子视图,因为它是在加载 nib 文件时设置其标签的子视图。 这似乎不起作用,父视图中没有显示任何内容。我想我必须做类似 loadWithNib 的事情,这可能吗?以上是关于iOS 自定义视图文本标签为零的主要内容,如果未能解决你的问题,请参考以下文章
如何从表格视图的自定义单元格内的文本字段中获取值(标签)以发布到 URL [重复]