从 IB 加载视图

Posted

技术标签:

【中文标题】从 IB 加载视图【英文标题】:Loading a View from IB 【发布时间】:2010-03-31 21:14:49 【问题描述】:

这应该是一个很容易解决的问题,但我还没有从阅读 Apple 文档或其他 SO 问题中弄清楚如何从以编程方式创建我的界面到使用界面生成器进行这个简单的切换。

我的代码基于这个框架: http://www.pushplay.net/blog_detail.php?id=27

唯一的区别是,每个视图都是在 ViewDidLoad 中以编程方式创建的(View01.m,View02.m),而我想从每个视图的 nib 导入(同时仍然使用这个框架)(每个视图都有一个独特的 IB 设计)。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

将 IB 视为对象创建者而不是代码生成器。这真的很有帮助。 IB 所做的实际上是在将对象拖到桌面/视图/XIB 窗口时创建对象实例。然后它允许您开始创建从一个对象到另一个对象的各种连接(通过鼠标上的控制拖动)。然后,您通过从捆绑包中取消归档来实例化整个 XIB。这是高度自动化的,在 UIViewController 上阅读应该会让你有所进步。看:

initWithNibName:bundle:

你基本上有两种类型的连接:

Outlet:这是你如何教一个对象关于另一个对象的存在的方式。例如,您可能有一个需要访问按钮的控制器对象。您在控制器中创建一个插座(在 controller.h 文件/属性区域中的 XCode Text Edit 中或通过添加插座在 IB 中),然后从插座中按住 control-click-drag 到按钮。

动作:这是您触发一个对象上的事件以调用另一个对象上的方法的方式。动作将有一个原型:

 - (IBAction) someMethod:(id) sender;

如果您的方法不需要指向导致事件的对象的链接,我认为“:(id) sender”是可选的。

在 IB 中,您可以排列对象并设置各种属性,例如大小、颜色、位置、目标/动作、用户交互、文件所有者...

这让我想到了文件所有者。这里有大概念。它往往是加载 NIB 的控制器(好吧:我有一个使用了 15 年以上的自定义窗口控制器,但 Apple 有一个非常好的 UIViewController 可以做各种好事。)并充当 IB 中的代理。它实际上并没有在 IB 中实例化,但它会在您分配并请求它加载 NIB 时进行(XIB 文件是通过编译过程转换为 NIB 文件的 XML 文件)

【讨论】:

以上是关于从 IB 加载视图的主要内容,如果未能解决你的问题,请参考以下文章

xib 指定的位置在 UIView 加载时移动?

从 NIB 与从代码加载自定义滑块:从代码加载时不存在子视图

自定义 UITableViewCell 未正确加载

iPad拆分视图加载奇怪

从 nib 文件加载

Xcode:Navigationcontroller 加载 UIpage 控制的视图?