2010-09-21 50 views
2

我是想在我使用一个稍微不同的方式来使用IB,我无法得到它的工作延长了正常的方法,我使用,具有IB打交道时。的UIView建立在Interface Builder连接到我的自定义的UIViewController

我不想制作一个新的UIViewController,而是为我和所有由Xcode链接的视图生成视图XIB,我只想构建一个小的(320x40像素)视图XIB并将其链接到我现有的ViewController。

我通过在Xcode中的新文件开始时,选择“查看厦门国际银行”。 然后我打开IB并添加一些标签等视图,我设置“文件所有者”是我现有的ViewController。 在我现有的ViewController中,我为标签等设置了IBOutlets。我放入了我的视图。 我回到IB并将UILabels连接到“文件所有者”中的我的网点。

现在我认为我有到厦门国际银行内标签的参考,在我的viewController。 这实际上并不是我想要的方法,我发现我的viewController无需在视图中引用标签。

如何我通常在代码:

我的视图控制器控制一堆UIViews的完全由代码和谁实例化它们是:

UIView *customView = [[CustomView alloc] initWithFrame:aFrame]; 
[customView setTag:MY_CUSTOM_VIEW]; 
[customView setDelegate:self]; 
[self.view addSubView:customView]; 
[customView release]; 

此后,我将访问标签,按钮从我的控制器使用[(UILabel*)[[self.view viewWithTag:MY_CUSTOM_VIEW] myLabel] [email protected]"Hello, World"]; 等有我的UIViewController需要实现什么都方法customView协议。

如何获得该功能与IB

我应该首先建立扩展UIView类,有它握住我的所有IBOutlets,设置MyCustomClass作为文件的所有者,然后实例化如上所示的MyCustomView类? 是否确定有对IB图的图充当的viewController和我将如何接力行动,以我的“真实”的viewController?

我想实现的是处理在我的UIViewControllers代码中实例化和布局多个UIViews,但是可以自由地在IB中设计一些这些UIViews。

我能找到的所有信息都是关于标准的“用视图的XIB构建UIViewController”或“如何构建IB组件的库”。

我希望这是有道理的,并感谢给予任何帮助:)

回答

1

您可以创建在Interface Builder想要的任何视图结构,然后使用UINib类实例化。一旦你创建了一个UINib对象,它会从nib中加载内容并保留它们。然后,无论何时您发送消息instantiateWithOwner:options:,它都会实例化xib中包含的对象,并返回具有顶级视图的数组。然后,您可以将这些视图添加到视图层次结构中,并像处理程序创建的任何其他视图一样处理它们。

如果保持UINib对象(如例如属性),你可以一次又一次地实例化内容,让您的XIB像一个模板使用。

更新:对于iOS 4之前的解决方法,请参阅my recent question and answer

+0

谢谢Toastor,这听起来像我需要的东西。我在文档中注意到它是一个iOS 4.0的新增功能,它会在运行3.x的设备上不起作用吗?如果要包装NIB视图,文档中也没有提到如何构建NIB(处理插座等)。你能否指出我在哪里可以看到这个功能是如何实现的。再次感谢。 – RickiG 2010-09-21 10:32:43

+0

对不起,我不知道任何资源,我自己想出了一些东西。在你的笔尖内,你可以像往常一样指定文件的所有者并进行适当的连接。尽管如此,它们对于所有实例都是相同的,因此您需要在实例化之后立即在新视图上设置标签,以便以后能够区分它们。至于iOS 4之前的更换 - 我有完全相同的问题。我会立即更新我的答案并提供问题和答案的链接。 – Toastor 2010-09-21 10:48:14

+0

你这样做就像你会为任何笔尖。假设你有一个视图控制器并将该笔尖的内容添加到VC的视图中。 VC有一个方法' - (IBAction)buttonPressed:(id)sender;'。如果在你的笔尖中添加一个按钮并将文件所有者设置为你的VC子类,那么可以照常将操作连接到按钮。当点击该按钮的任何实例时,该操作方法将被调用,但是,这就是为什么如果您只是一次实例化该笔尖,您需要标签。否则,你不知道哪个按钮被点击。 – Toastor 2010-09-21 12:09:07

相关问题