如何将IBOutlets连接到自定义UIView?

时间:2012-07-04 09:59:41

标签: ios cocoa-touch uiview xib iboutlet

我有一个带有通用界面元素的视图控制器,需要在菜单视图中加载。我创建了一个名为MenuView.hMenuView.m的自定义UIView,并使用代码在其中构建了所有视图。但是,我更愿意在.xib文件中设置视图,以便我可以更轻松地将它们布局。

我知道整个loadNibNamed以便将nib / xib文件加载到我的自定义UIView中,但我不明白的是我如何将一些IBOutlet连接到加载的笔尖。

有人有任何关于如何做到这一点的指示吗?

1 个答案:

答案 0 :(得分:3)

要做到这一点:

  1. 创建xib。
  2. 将文件的所有者 设置为您想要充当控制器的类(通常是UIViewContoller子类 - 尽管在iOs5,Apple之前在屏幕上有多个控制器时,不建议使用UIViewController。 (此步骤是在xib中显示此类,以便您可以创建插座)。
  3. 在此课程中为自定义视图创建IBOutlet/IBAction
  4. 在致电loadNibNamed:owner:option:时,请将所有者作为此课程的对象。
  5. UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"CustomXib" owner:<customClassobject> option:nil] objectAtIndex:0];
    

    并在某处使用它:

    [someView addSubview:view]
    

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

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

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

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

    然后,无论您何时使用视图,都使用myVC.view。例如,

     [someview addSubview: myVC.view];
    

    <强>更新

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

    有关场景的多个控制器的设计观点的更多信息,请参阅here