【问题标题】:Link the IBOutlets when creating an instance of UIView using a NIB file使用 NIB 文件创建 UIView 实例时链接 IBOutlets
【发布时间】:2011-05-20 17:36:52
【问题描述】:

我使用这样的 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

【问题讨论】:

  • @elitalon 你使用的是 XCode3 还是 4?
  • @Nick Weaver 我正在使用 Xcode 4
  • @elitalon 在 IB 中选择您的自定义视图 GameResultsView,然后打开实用程序,然后选择身份检查器。自定义类字段说明了什么?
  • @Nick Weaver 我已将其设置为 GameResultsView。
  • @elitalon 你有没有合成标签的访问器方法?是 GameResultsView * 类型的 self.results 吗?你能确保 NSBundle/loadNibNamed 返回你的视图并且是正确的类吗?

标签: uiview subclass nib iboutlet


【解决方案1】:

你可以像这样加载笔尖:

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。

【讨论】:

  • 关键步骤是将实际对象传递给instantiateWithOwner: 方法。我应该将self.results作为参数传递,在分配并初始化它之后
猜你喜欢
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 2011-11-25
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
相关资源
最近更新 更多