在nib中加载顶级对象的顺序

时间:2012-06-03 20:36:58

标签: objective-c cocoa interface-builder nib appkit

nib文件中顶级对象的加载顺序是随机的还是可以确定?我认为它会按照我将它们放入Interface Builder中的顺序加载对象。但似乎并非总是如此。

我想创建一个类似于Interface Builder的检查器视图,其中不同的部分具有交替的背景颜色。我计划通过在我的笔尖中将这些部分作为顶级视图进行排序,然后根据加载顺序对它们进行着色。

1 个答案:

答案 0 :(得分:5)

根据文档,装载顺序未定义:

  

无法保证nib加载代码调用对象的awakeFromNib方法的顺序。在OS X中,Cocoa最后尝试调用File的Owner的awakeFromNib方法,但不保证该行为。如果需要在加载时进一步配置nib文件中的对象,最合适的时间是在nib-loading调用返回之后。此时,所有对象都已创建,初始化并可供使用。

请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html

无论如何,依靠加载顺序之类的东西来确定视觉布局似乎是一个非常不健全的想法。我会使用NSTableView / UITableView,它将为您完成布局,交替行颜色等。 (在Mac上,您可能需要基于视图的表视图)。如果由于某种原因需要自定义解决方案,请在代码中动态加载和添加视图,您可以完全控制它们在父级中的顺序和位置。