2

I have a view controller with generic interface elements that needs to load in a menu view. I have created a custom UIView called MenuView.h and MenuView.m and built all the views in it using code. However, I'd much rather set out the views in a .xib file so that I can lay them out more easily.

I do know about the whole loadNibNamed in order to load a nib/xib file into my custom UIView, however what I don't understand is how I can wire up some IBOutlets to the loaded nib.

Does anyone have any pointers to how this is done please?

4

1 回答 1

3

去做这个:

  1. 创建xib。
  2. 将文件的所有者设置为您想要充当控制器的类(通常是UIViewContoller子类 - 尽管在 iOs5 之前,Apple 不建议UIViewController在屏幕上有多个控制器时使用)。(此步骤是使此类在 xib 中可见,以便您可以创建您的插座)。
  3. IBOutlet/IBAction在此类中为您的自定义视图创建。
  4. 并在调用时loadNibNamed:owner:option:,将所有者作为此类的对象。

IE

UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"CustomXib" owner:<customClassobject> option:nil] objectAtIndex:0];

并在某处使用它:

[someView addSubview:view]

另一种方法是创建自定义视图控制器并使用视图控制器访问视图。

  • 重复上述步骤 1-3,将自定义视图控制器(比如 MyViewCon)作为文件的所有者。您还必须将控制器的视图引用连接到 xib 视图。

然后不使用loadNibNamed...,而是初始化视图控制器。IE

MyViewCon *myVC = [[MyViewCon alloc] initWithNibName:@"CustomXib"];

然后无论您必须使用视图使用myVC.view. 例如,

 [someview addSubview: myVC.view];

更新

如果您为UIViewController子视图和父视图使用与文件所有者相同的子类,您应该意识到这将是同一类的两个不同对象,并且可能会导致混淆,因为在同一变量中执行操作时可能会显示不同的值场景。

有关场景的多个控制器的设计角度的更多信息,请参阅此处

于 2013-03-13T09:23:49.280 回答