首页 > 解决方案 > 为什么我不能将 xib 文件作为子视图添加到我的主 xib?

问题描述

我有一个主xib文件,想向其中添加/重用subviewxib 文件(如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”而终止应用程序,原因:“[< NSObject 0x600000fb9220 > setValue:forUndefinedKey:]:此类与键 activityIndi​​catorView 的键值编码不兼容。”

最后一部分:“activityIndi​​catorView”根据xib我尝试加载的文件而变化。有时它是“ViewingNumberBanner”或其他东西。

这些xib文件比工作测试更复杂-xib所以显然我一定错过了一些东西。问题是我不知道从哪里开始。我可能应该提到,所有xib文件在以常规方式使用时都是独立工作的。让我知道您是否想知道其他可以提供帮助的信息。

在此处输入图像描述

为了说明,我附上了一张图片。

  1. 文件名。这是我用的名字nibWithNibName:@"SecondView"

  2. 这与它无关xib。但如果我没记错的话,class它似乎有很多文件的视图(见屏幕左侧)。xib

  3. 这有class与之关联的 ColleagueTableViewController。这是xib我要加载的。我不知道这是否是index [0]我使用的时候instantiateWithOwner,我只是在猜测。我怎么确定?

标签: objective-cxcodexibuicontainerview

解决方案


从长远来看,这里有两个问题:

  • 没有人应该将视图控制器保存在.xib文件中。这就是.storyboard文件的用途。即使您不使用 segue,故事板也允许您通过标识符实例化视图控制器,而.xib文件无法做到这一点。加上很多其他的好东西。

  • 如果您要从.xib文件加载视图层次结构,则视图应该是该.xib中唯一的内容。然后你只需在没有所有者的情况下加载它,拉出第一个视图,然后在你的界面中使用它。如果您要加载多个此类视图,请每个.xib使用一个。


推荐阅读