关于 ios:如何将 IBOutlets 连接到自定义 UIView?

How can I wire up IBOutlets to a custom UIView?

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

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

请问有没有人指点一下这是怎么做的?


要做到这一点:

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

    并在某处使用它:

    1
    [someView addSubview:view]

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

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

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

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

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

    1
     [someview addSubview: myVC.view];

    更新:

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

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