我最近被朋友介绍给iOS开发,并开始尝试界面构建器和视图控制器。我发现的一件事是,当将nib与视图控制器结合使用时,视图控制器ivars很快就会被您可能永远不会实际引用的视图所污染。我想将主要笔尖中的关键组件模块化为几个不同的视图。我有两个问题:
initWithNibName:bundle:
。我不能打电话给initWithFrame:
吗?答案非常感谢!
谢谢,
PhpMyCoder
修改
我发现了第一个问题的答案。似乎在nib文件的属性检查器中,必须禁用状态栏(将其更改为未指定)以启用在大小检查器中编辑高度和宽度参数。但是,我仍然不确定如何将这些自定义笔尖及其视图控制器添加到另一个笔尖,而无需使用initWithFrame:
和addSubview:
对其进行编码。有关将视图控制器的视图添加到IB中的笔尖的任何想法吗?
编辑2
添加了问题3(或2,取决于您的想法)。
编辑3
我今天似乎急忙问问题。对setFrame:
的简单调用将处理大小调整和定位(您甚至可以将其附加到init函数initWithNibName:bundle:frame:
)。仍然不确定如何将视图(由nib创建)从视图控制器添加到Interface Builder中的另一个nib。如果可以的话,我很想听听。
答案 0 :(得分:1)
请记住,不要让ViewControllers和Views混淆。
它们都在一个层次结构中,每个ViewController都有/控制一个“主”view
(可能有一堆子视图)。
您不会向笔尖添加视图。 nib是一种帮助您组装视图的机制。 (NeXT接口构建器文件,如果我们深入研究命名法。)
这是你加载笔尖的方法:
[[NSBundle mainBundle] loadNibNamed:@"foo" owner:self options:nil];
通常情况下,你给控制器一个nib名称并为你做,但你可以这样做。访问内容有复杂而棘手的方法。以下是执行此操作的标准方法。
您传入的所有者必须是在该nib文件中声明为所有者的类型。它应该将一些出口连接到nib文件中的对象。加载nib文件后,它们只会“在那里”。如果你两次调用它,它将覆盖第一个并用第二个替换它们。 (大多无害,绝对没用)
因此,通常情况下,您将其连接到view
。现在,您有一个在内存中浮动的视图,并且不是连接到应用程序的视图层次结构。是时候这样做了。 您必须抓取view
并找出它在预先存在的层次结构中的位置,然后调用[someOtherView addSubview:self.view]
否,它就会出现。是的,如果你想明确地放置/调整它,你需要这样做。请注意view.frame
位于superview的坐标系中。