gpt4 book ai didi

iphone - 从 xib 加载 UIView,尝试访问 IBOutlet 时崩溃

转载 作者:行者123 更新时间:2023-12-03 18:34:31 25 4
gpt4 key购买 nike

我有一个 xib 文件,上面有一个小的 UIView,其中又包含一些标签。现在,我尝试将该 UIView 加载到现有的 UIViewController 中,并更改其中一个标签文本。我想这样做的原因是 UIView 将与不同的标签文本一起重用,所以我认为制作一个自定义类并从 xib 加载它是最好的方法。

我尝试了多种加载它的方法,并成功地将它显示在我的 View Controller 上。问题是,一旦我尝试在 Interface Builder 中实际链接 IBOutlet 并访问它,我的应用程序就会崩溃。

我创建了一个自定义 UIView 类,如下所示:

CoverPanel.h

@interface CoverPanel : UIView {

IBOutlet UILabel *headline;

}

@property (nonatomic, retain) IBOutlet UILabel *headline;

@end

CoverPanel.m

@implementation CoverPanel

@synthesize headline;

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// Initialization code.
//
self = [[[NSBundle mainBundle] loadNibNamed:@"CoverPanel" owner:self options:nil] objectAtIndex:0];
}
return self;
}

CoverPanel.xib中,我已将UILabel链接到标题导出。在我的 View Controller 中,以下是我创建 CoverPanel 实例的方法,这就是它崩溃的地方:

CoverPanel *panelView = [[CoverPanel alloc] initWithFrame:CGRectMake(0,0,300,100)];

到目前为止,一切都很好。它完全按照 .xib 中的布局显示 UIView。但是一旦我尝试像这样更改 headline.text :

panelView.headline.text = @"Test";

它因以下错误而崩溃:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIView标题]:无法识别的选择器发送到实例0x5c22b00”

这可能是我忽略的一些小事情,但到目前为止它已经让我发疯了好几个小时了。有人知道吗?

最佳答案

您将自定义 View 的类重新分配给位于 xib 中的 View 。您不需要这样做,因为您得到的只是来自 xib 的 View ,并且您刚刚泄露了 CoverPanel。因此,只需替换您的初始值设定项即可:

- (id)initWithFrame:(CGRect)frame 
{
self = [super initWithFrame:frame];
if (self)
{
// No need to re-assign self here... owner:self is all you need to get
// your outlet wired up...
UIView* xibView = [[[NSBundle mainBundle] loadNibNamed:@"CoverPanel" owner:self options:nil] objectAtIndex:0];
// now add the view to ourselves...
[xibView setFrame:[self bounds]];
[self addSubview:xibView]; // we automatically retain this with -addSubview:
}
return self;
}

关于iphone - 从 xib 加载 UIView,尝试访问 IBOutlet 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6039209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com