0

我有一个带有关联控制器的主视图。我有一些相当复杂的工具栏,我需要根据用户交互来切换。

为了简单起见,我使用主视图控制器管理工具栏,而不是拥有各种相互交织的依赖关系或非常深的委托链。

无论如何,我怎样才能在一个 xib 中有多个视图并正确初始化它们?就像我想在屏幕中央显示一个自定义视图一样,我该怎么做?

或者,如果我将视图分成多个 xib,如何让它们为它们的 IBOutlets/IBActions 引用相同的控制器对象?

4

3 回答 3

2

无论如何,我怎样才能在一个 xib 中有多个视图并正确初始化它们?就像我想在屏幕中央显示一个自定义视图一样,我该怎么做?

您可以UIView在 xib 中拥有任意数量的 s。通常,您将创建一个“主要”视图——连接到文件所有者的视图属性(即您的视图控制器)的视图——其余的可以位于同一级别的 xib 中。您也可以将它们连接到视图控制器中的其他属性。

您可以将这些视图作为主视图的视图。(很少,这是很多观点)。假设您有两个视图,FooView并且BarView. 你想FooView在启动时出现。所以你只是设置BarView为隐藏在 IB 中。然后你的视图控制器可能看起来像这样:

@interface MyViewController : UIViewController
{
    FooView* fooView;
    BarView* barView;
    ...
}
...
@property (nonatomic, retain) IBOutlet FooView* fooView;
@property (nonatomic, retain) IBOutlet BarView* barView;
...

然后,在您的代码中,当您想要更改视图时,只需使用该setHidden:方法隐藏一个并显示另一个。

或者,如果我将视图分成多个 xib,如何让它们为它们的 IBOutlets/IBActions 引用相同的控制器对象?

您可以让其他 xib 共享相同的视图控制器。我自己做了很多。只需将文件所有者设置为适当的类。

于 2009-12-15T19:45:10.303 回答
2

其实很简单。您只需在 XIB 文件中创建一个新的根级视图,并IBOutlet在主视图控制器中为此视图创建一个。

至于直接从 XIB 加载视图,共享相同的视图控制器,那就有点草率了。你基本上需要遍历 XIB 文件中的项目并找到你正在寻找的元素。

于 2009-12-15T19:35:12.417 回答
0

这种方法需要注意的一点是,当需要任何视图时,所有视图都会被初始化。

如果您的视图很简单,这可能无关紧要,但如果您有复杂的视图,这可能会使您的应用程序加载缓慢。

如果视图有些复杂,您应该将它们拆分为不同的.xib文件。在这种情况下,父类UIViewController将拥有 IBOutlets 到其他UIViewController子类,而不是 IBOutlets 到UIViews. 视图控制器将自动处理它们各自视图的延迟加载。

于 2009-12-15T19:43:12.510 回答