我有一个主xib
文件,并且想向其中添加/重用subview
xib文件(例如android studios
fragments
)。我只测试了一个简单的xib
文件,该文件具有粉红色的背景色,并且使用以下代码可以正常工作:
UINib *nib = [UINib nibWithNibName:@"testXib" bundle:nil];
UIView *sub = [nib instantiateWithOwner:nil options:nil][0];
[containerOutlet addSubview:sub];
[NSLayoutConstraint activateConstraints:@[
[sub.leadingAnchor constraintEqualToAnchor:containerOutlet.leadingAnchor],
[sub.trailingAnchor constraintEqualToAnchor:containerOutlet.trailingAnchor],
[sub.topAnchor constraintEqualToAnchor:containerOutlet.topAnchor],
[sub.bottomAnchor constraintEqualToAnchor:containerOutlet.bottomAnchor]
]];
这会在主xib
中显示我的彩色xib
。但是,一旦我尝试添加任何现有的xib
文件,该应用就会因以下错误而崩溃:
由于未捕获的异常“ NSUnknownKeyException”而终止应用程序,原因:“ [
setValue:forUndefinedKey:]:此类不适用于键activityIndicatorView的键值编码兼容。”
最后一部分:“ activityIndicatorView”随我尝试加载的xib
文件而异。有时是“ ViewingNumberBanner”或其他名称。
xib
文件比工作测试xib
更复杂,因此显然我必须错过一些东西。问题是我不知道从哪里开始。我可能应该提到,所有xib
文件在以常规方式使用时都可以独立工作。让我知道您是否想知道其他有用的东西。
为了说明,我附了一张图片。
文件名。这是我在nibWithNibName:@"SecondView"
此xib
没有与之关联的class
。但是,如果我没记错的话,它似乎有很多xib
文件的视图(请参见屏幕左侧)。
它具有class
个ColleagueTableViewController与其关联。这是我要加载的xib
。我不知道当我使用index
时是否是[0]
instantiateWithOwner
,我只是在猜测。我怎么知道?
答案 0 :(得分:0)
长远来看,这里有两个问题:
没有人应该将视图控制器保存在 .xib 文件中。这就是 .storyboard 文件的用途。即使您不使用segues,情节提要也允许您通过标识符实例化视图控制器,而对于 .xib 文件则无法实现。加上很多其他好东西。
如果要从 .xib 文件加载视图层次结构,则该视图应该是该 .xib 中的唯一内容。然后,您无需所有者就加载它,拉出第一个视图,然后在您的界面中使用它。如果要加载多个此类视图,请在每个 .xib 中使用一个。