objective-c - 为什么我不能将 xib 文件作为子视图添加到我的主 xib?
问题描述
我有一个主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”而终止应用程序,原因:“[< NSObject 0x600000fb9220 > setValue:forUndefinedKey:]:此类与键 activityIndicatorView 的键值编码不兼容。”
最后一部分:“activityIndicatorView”根据xib
我尝试加载的文件而变化。有时它是“ViewingNumberBanner”或其他东西。
这些xib
文件比工作测试更复杂-xib
所以显然我一定错过了一些东西。问题是我不知道从哪里开始。我可能应该提到,所有xib
文件在以常规方式使用时都是独立工作的。让我知道您是否想知道其他可以提供帮助的信息。
为了说明,我附上了一张图片。
文件名。这是我用的名字
nibWithNibName:@"SecondView"
这与它无关
xib
。但如果我没记错的话,class
它似乎有很多文件的视图(见屏幕左侧)。xib
这有
class
与之关联的 ColleagueTableViewController。这是xib
我要加载的。我不知道这是否是index
[0]
我使用的时候instantiateWithOwner
,我只是在猜测。我怎么确定?
解决方案
从长远来看,这里有两个问题:
没有人应该将视图控制器保存在.xib文件中。这就是.storyboard文件的用途。即使您不使用 segue,故事板也允许您通过标识符实例化视图控制器,而.xib文件无法做到这一点。加上很多其他的好东西。
如果您要从.xib文件加载视图层次结构,则视图应该是该.xib中唯一的内容。然后你只需在没有所有者的情况下加载它,拉出第一个视图,然后在你的界面中使用它。如果您要加载多个此类视图,请每个.xib使用一个。
推荐阅读
- elasticsearch - ElasticSearch:从存在的所有文档中删除字段(使用 Painless?)
- ios - 在后台线程崩溃中缩放图像 - UIGraphicsImageRenderer
- html - 如何在另一个项目中使用已编译的 Typescript 文件。(ts)是(.js)
- ionic4 - Ionic 4 和 ag-grid
- javascript - 在数据库中存储字典
- java - SSL 如何与带有 Spring REST API 或任何其他 REST API 的网站一起使用
- html - Boostrap 行:让行内的列居中?
- c# - DeviceInformation.FindAllAsync() 什么都不做
- sql - 用于选择其他列中不存在的值的 SQL 代码
- sql - 标记表的每个分区中前 90% 的行