使用Xcode 4.3.3,我无法弄清楚如何将自定义UIView类中的出口与Interface Builder中创建的对象连接起来。
在一个ViewController中,我有各种各样的按钮,滑块等,我试图将它们分组到Views中。因此,在IB的ViewController中,我添加了3个视图。在任何给定时间只能看到1个视图。
我派生了自定义UIView类来处理这3个视图中的每一个。我的视图控制器实例化每个类。我在IB中选择了视图,打开了Identity Inspector并将Class设置为我的自定义类。但是当我尝试将视图中的连接和/或它的组成控件拖动到自定义视图的.h文件时,IB将不会添加连接。
IB允许我通过拖动到父视图控制器的.h而不是自定义视图的.h文件来添加出口/操作。我想过,一旦我将View的类设置为我的自定义类,我就可以将视图组件的出口拖到我的自定义类而不是视图控制器中。
这个问题与我的问题相同:how to connect UIview outlets to a custom subview这两个解决方案(手动添加插座并在IB中设置视图的类)并没有改变我的行为。以下是我添加的手册:
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而不是视图控制器添加插座,还需要设置/检查什么?
答案 0 :(得分:15)
请注意,我今天确实让它工作,但是必须在派生类中手动插入/输入插座,然后我可以从头文件拖到Storyboard中的UI元素,但不是相反。
答案 1 :(得分:2)
我向Apple公开了一个错误。如果发生任何有趣的事情,我会更新这个答案。
2013年10月4日更新:经过大量研究后,问题的根源似乎是IB认为我正在尝试将对象连接到类中的属性,然后我将创建一个群此类的实例然后IB将无法告知哪个实例应该处理消息。因此,它不相信我相信我(可能)在一个类的几个实例中同时从一个对象到一个属性的多个副本进行连接。
我的观点是,我只想要一个自定义UIView的单个实例,并且我应该能够告诉IB,“不要惊慌,你只是处理这个实例。”
我现在专注于一个新项目,并且没有机会在Xcode 5中重试这个项目;但是,鉴于上面的信息,我不乐观它也适用于Xcode 5。
答案 2 :(得分:1)
你要做的事情当然是明智的(IMO)和可能的。然而,当在子视图中建立与出口的连接时,XCode非常古怪。
我发现清理,重建和有时重新启动XCode往往会有所帮助,但有时却无法正常工作。在某些情况下,我通过手动创建插座并从插座拖动到控件而不是其他方式来使其工作。
这不是很有帮助,我知道,但我只是想说清楚这是假设可以工作,当它没有时,它肯定是由于XCode中的一个错误。
答案 3 :(得分:0)
根据我的经验,您将IBAction和IBOutlet添加到UIViewController的子类而不是UIView的子类。因此,在MVC模型中,您的“1”UIViewController中包含所有这些IBOutlet,然后您使用这些IBOutlet中的数据来更新您的视图。
所以你可以在IB中创建UIViews对象,然后在代码中创建相应的类,然后将IB中UIViews对象的类更改为UIView子类。只需将所有IBOutlets放在UIViewController中,其中包含所有UIViews,从IBOutlets获取所需的值,然后将它们传递给(设置它们)你的UIView子类。
希望这有帮助。
答案 4 :(得分:0)
我遇到了同样的问题并找到了解决方法:
1)使用左侧的customView3.xib和右侧的customView3.h打开Assistant Editor
2)ctrl +从customView3.xib中的UISlider拖动到右侧的customView3.h代码
3)将弹出一个创建新Outlet连接的选项。
4)为连接命名,然后单击“连接”
然后它将创建一个连接的IBOutlet。