使用 NIB 文件创建 UIView 实例时链接 IBOutlet

发布于 2024-11-08 06:52:20 字数 987 浏览 2 评论 0原文

我使用 NIB 文件的内容创建了一个 UIView 对象,如下所示:

self.results = [[[NSBundle mainBundle] loadNibNamed:@"ResultsView" owner:self options:nil] lastObject];
self.results.frame = CGRectMake(0, 0, 320, 500);

但是 self.results 实际上是 UIView 的子类:

@interface GameResultsView : UIView {
  UILabel *title;
}
@property (nonatomic, retain) IBOutlet UILabel *title;

@end

我有通过 Interface Builder 将 GameResults 中定义的 title 属性与 UILabel 对象连接起来。但在执行过程中,当视图分配给 self.results 时,应用程序会停止并显示 SIGABRT 消息:

-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4c2f780
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4c2f780'

看起来标签根本无法连接。这样做的正确方法是什么(如果有)?我的目的是将此自定义视图添加到 UIScrollView 对象中。

谢谢!

更新:我正在使用 Xcode 4

I have created a UIView object using the contents of a NIB file like this:

self.results = [[[NSBundle mainBundle] loadNibNamed:@"ResultsView" owner:self options:nil] lastObject];
self.results.frame = CGRectMake(0, 0, 320, 500);

But self.results is a subclass of UIView actually:

@interface GameResultsView : UIView {
  UILabel *title;
}
@property (nonatomic, retain) IBOutlet UILabel *title;

@end

I have connected the title attribute defined in GameResults with a UILabel object through Interface Builder. But during execution the application stops with a SIGABRT message when the view is assigned to self.results:

-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4c2f780
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4c2f780'

It seems like the label cannot be connected at all. What's the right way of doing this (if any)? My purpose here is add this custom view to a UIScrollView object.

Thanks!

UPDATE: I'm using Xcode 4

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心凉 2024-11-15 06:52:20

您可以像这样加载笔尖:

UINib * nib = [UINib nibWithNibName:aName bundle:nil];

NSArray * nibContent = [nib instantiateWithOwner:self options:nil];

for (id aView in nibContent) {
    if ([aView isKindOfClass:[GameResultsView class]]) {
         return aView;
    }
}

这将返回第一次出现的 GameResultsView。

You can load the nib like this:

UINib * nib = [UINib nibWithNibName:aName bundle:nil];

NSArray * nibContent = [nib instantiateWithOwner:self options:nil];

for (id aView in nibContent) {
    if ([aView isKindOfClass:[GameResultsView class]]) {
         return aView;
    }
}

This will return the first occurence of a GameResultsView.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文