无法在Interface Builder(Xcode 5)中创build子视图的sockets连接

我知道这似乎是其他一些问题的重复,但答案不适合我。

  1. 我创build了一个单一的视图应用程序。
  2. 在故事板中,我在主视图中添加了一个子视图。
  3. 我在我的主视图上有一个标签,在我的子视图上有另一个标签。
  4. 我创build了一个UIViewtypes的类,并将其添加为子视图的自定义类。
  5. 我可以ctrl-drag我的标签在我的主视图到主视图控制器类。 但是,当我尝试按Ctrl-拖动我的标签在我的子视图到我的自定义类,我无法获得连接发生。
  6. 我甚至input了属性信息,并尝试手动build立连接无济于事。

Xcode界面生成器的最新版本已经发生了一些变化。 有人能告诉我我错过了什么吗? 这里几乎没有代码。 我只是testing试图连接sockets与自定义类的子视图。

第一个图像显示我已经设置了自定义类并添加了一个属性,但是我无法build立连接。

Interface Builder中的主视图和子视图 - 自定义类已设置

第二张图显示主视图标签连接在主视图的控制器中。

Interface Builder中的主视图和子视图 - 主视图的标签已连接

第三张图片显示子视图标签没有出口连接。

Interface Builder中的主视图和子视图 - 不能连接子视图的标签

您可以在自定义视图子类的@interface中手动编写IBOutlet属性声明,并假设您已经在IB中定义了子视图的基类,那么您可以从代码中的sockets圆圈拖回到现场。

在这里输入图像说明

或者,正如你所指出的那样,沃伦·伯顿(Warren Burton)在他对这个问题的回答中提出了这个技巧和另外一个问题, 不能在IB中连线到子视图 。

这个问题与View Controller的File Owner有关。 它可能被设置为IOViewController,因此您只能在该.h文件中进行属性连接。

你可以做什么,是为子视图创build另一个.nib文件,并把子视图在那里。 然后在那个.nib文件中,使文件拥有者IOSubview。 物业连接将在那里工作得很好。 然后以编程方式将子视图添加到您的IOViewController。 只记得首先从bundle中加载nib文件。

这就是我所做的(在Swift中):

  • 我创build了一个新的ViewController(例如类MyViewController:UIViewController {})
  • 在StoryBoard中,我扩展了“场景”(即所有UI组件的树视图)并select了“MyViewController”
  • 使用“身份检查器”,我分配了“MyViewController”类(与默认的UIViewController相反)

之后,我可以分配一个行动。

我怀疑Obj-C是类似的过程。

您不要在子类中创buildsockets,而是在其所在的视图控制器上创buildsockets。 您需要#import将子类导入IDViewController.h并在那里创build一个sockets。

IDViewController.h

 #import "IDSubclass.h" ... @property (strong, nonatomic) IBOutlet IDSubclass *outletName; 

放大你的故事板到100%。 如果缩小,说50%,那么sockets连接将不起作用。