我可以在笔尖和编程中定义 UIView 吗?

Posted

技术标签:

【中文标题】我可以在笔尖和编程中定义 UIView 吗?【英文标题】:Can I define a UIView both in a nib AND programmatically? 【发布时间】:2011-07-07 22:47:16 【问题描述】:

这是常见的做法还是不受欢迎?这种做法是否有任何标准/资源?有哪些替代方案?我意识到这个问题很广泛,但我是 ios 开发的新手,任何信息都有帮助。谢谢!

编辑:我的意思是 same 视图。

【问题讨论】:

您的意思是,“我可以以编程方式在笔尖中定义相同的视图吗?”如果是这样,我看不出这样做的理由。如果你的意思是,我可以定义两个视图,一个在 IB 中,一个在 nib 中,当然可以。 【参考方案1】:

是的,您可以将 XIB 描述的对象与程序创建的对象互换,您可以对 XIB 实例化的对象进行程序修改,或者您可以在程序视图中使用 XIB 实例化的对象。

基本上,XIB 只是“生成代码”(以一种向后的方式)来实例化它所描述的对象,并且一旦创建了根视图及其所有子视图,它就与它的程序创建的孪生没有区别。

【讨论】:

实际上,nib 是对象的存档,在加载时会被取消存档。没有“生成”代码,但对象是从存档中初始化的。 我认为 WTP 的评论对于实际问题很有启发性。 XIB 只是对象的存档副本,与任何属性列表的方式大致相同。各种连接是使用 ObjC 的固有反射实现的。因此,不仅每个 XIB 不会生成任何代码,而且一旦加载对象就可以更改它们,因为一旦创建,它们与以任何其他方式创建的对象没有本质上的不同。 感谢 Daniel 和 WTP 的澄清。所以 Daniel,如果我要对 XIB 实例化的对象进行编程修改,我会在视图控制器还是同名视图中进行这些修改? 是的,WTP,我有点过于简化了。存档的图像确实必须以某种方式进行解释,因此执行代码的许多动作都会发生,但它并不是真正生成的代码。 您可以在任何地方(在合理范围内)对 XIB 实例化的对象进行修改。你只需要记住,“拥有”视图控制器是默认的响应者/代表。【参考方案2】:

是的,您可以以任何您喜欢的方式混合使用以编程方式创建的资源和 nib 加载的资源 - 通常 nib 将用于设置代码可能会更改或添加更多视图的框架。

【讨论】:

以上是关于我可以在笔尖和编程中定义 UIView 吗?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建视图 VS。笔尖

可以使用自定义 UIViewController 但没有自定义 UIView 类来实现手势识别吗?

iOS:从笔尖加载自定义 UIView

将自定义 UIView 笔尖的宽度设置为其父 CollectionViewCell

如何将一个笔尖嵌入另一个笔尖?

从其他视图控制器更改 UIView(笔尖内)背景