界面生成器将不允许连接到自定义的UIView类?

使用Xcode 4.3.3,我无法弄清楚如何将自定义UIView类中的sockets与在Interface Builder中创build的对象连接起来。

在一个ViewController中,我有各种各样的button,滑块等,我试图组成视图。 所以,在IB的ViewController中,我添加了3个视图。 在任何时候只有1个视图可见。

我派生自定义UIView类来处理这3个视图中的每一个。 我的视图控制器实例化每个类。 我select了IB中的视图,打开了Identity Inspector并将Class设置为我的自定义类(es)。 但是,当我试图从视图拖动连接和/或它的组成控件到自定义视图的.h文件IB不会添加连接。

IB允许我通过拖动到父视图控制器的.h,而不是自定义视图的.h文件来添加sockets/操作。 我曾经想过,将视图的类设置为我的自定义类,我可以将视图组件的插口拖到我的自定义类中,而不是在视图控制器中。

这个问题似乎与我的相同: 如何将UIviewsockets连接到自定义的子视图这两个解决scheme(手动添加sockets和在IB中设置视图的类)并没有改变我的行为。 这里是我添加的手动sockets:

customView3.h

#import <UIKit/UIKit.h> @interface customView3 : UIView @property (retain) IBOutlet customView3 *view3; @property (retain) IBOutlet UISlider *slider; @end 

customView3.m

 #import "customView3.h" @implementation customView3 @synthesize view3, slider; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code } return self; } @end 

我在这里错过了什么? 还有什么我需要设置/检查,以添加网点到我的自定义UIView而不是视图控制器?

请注意,我确实得到了今天的工作,但不得不手动插入/input派生类中的sockets,然后我可以从头文件拖动到故事板的UI元素,而不是相反。

我开了一个苹果的错误。 如果有什么有趣的事情发生,我会更新这个答案。

更新10/4/13:经过大量的研究,似乎问题的根源在于,IB认为我试图将对象连接到类中的属性,然后创build一个这样的实例然后IB将无法知道哪个实例应该处理消息。 所以,它不允许连接的信念,我(可能)在一个类的多个实例跨一个属性的多个副本的同时连接。

我的观点是,我只想要一个自定义UIView的实例,我应该能够告诉IB,“不要惊慌,你只是在处理这个实例。

我现在专注于一个新的项目,并没有机会在Xcode 5中重试; 不过,考虑到上面的信息,我不太乐观,它也将在Xcode 5中工作。

你试图做的当然是明智的(IMO)和可能的。 但是,XCode在子视图中build立与网点的连接时相当古怪。

我发现,清理,重build,有时重新启动XCode往往有帮助,但有时它不工作。 在某些情况下,我通过手动创build出口并从出口拖动到控件而不是其他方式来工作。

我知道这并不是很有帮助,但是我只是想说清楚这是否应该起作用,什么时候不起作用,肯定是由于XCode中的一个错误。

根据我的经验,将IBAction和IBOutlet添加到UIViewController的子类而不是UIView的子类。 因此,在MVC模型中,您的“1”UIViewController具有所有这些IBOutlets,然后使用这些IBOutlets中的数据更新您的视图。

所以你很好地在IB中创buildUIViews对象,然后在代码中创build相应的类,然后将IB中的UIViews对象的类更改为您的UIView子类。 把所有的IBOutlets放在UIViewController中,它具有所有的UIViews,从IBOutlets中获取你需要的值,然后传递给你的UIView子类。

希望这可以帮助。

我遇到了同样的问题,发现了一个解决方法:

1)打开助手编辑器,左侧是customView3.xib,右侧是customView3.h

2)ctrl +从customView3.xib中的UISlider拖动到右侧的customView3.h代码

3)popup一个选项来创build一个新的Outlet连接。

4)命名连接,然后单击连接

然后它将创build一个连接的IBOutlet。