9

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

在一个 ViewController 中,我有各种按钮、滑块等,我试图将它们组合到视图中。所以,在 IB 的那个 ViewController 中,我添加了 3 个视图。在任何给定时间,只有 1 个视图可见。

我派生了自定义 UIView 类来处理这 3 个视图中的每一个。我的视图控制器实例化了每个类。我在 IB 中选择了视图,打开了身份检查器并将类设置为我的自定义类。但是,当我尝试将连接从视图和/或其组成控件拖动到自定义视图的 .h 文件时,IB 不会添加连接。

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

这个问题似乎与我的相同:如何将 UIview 插座连接到自定义子视图这两种解决方案(手动添加插座和在 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 而不是视图控制器,我还需要设置/检查什么?

4

5 回答 5

17

请注意,我今天确实让它工作了,但是必须在派生类中手动插入/键入插座,然后我可以从头文件拖动到情节提要中的 UI 元素,但不能反过来。

于 2013-12-06T17:15:39.350 回答
2

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

2013 年 10 月 4 日更新:经过大量研究,问题的根源似乎在于 IB 认为我正在尝试将对象连接到类中的属性,然后我将创建一组这样的实例类,然后 IB 将无法判断哪个实例应该处理消息。因此,它不允许连接,因为我认为我(可能)在类的多个实例中从一个对象同时连接到属性的多个副本。

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

我现在专注于一个新项目,还没有机会在 Xcode 5 中重试;但是,鉴于上述信息,我也不乐观它会在 Xcode 5 中工作。

于 2013-02-22T20:44:28.100 回答
1

您正在尝试做的事情当然是明智的(IMO)和可能的。然而,在子视图中建立与插座的连接时,XCode 相当古怪。

我发现清理、重建和有时重新启动 XCode 往往会有所帮助,但有时它只是不起作用。在某些情况下,我通过手动创建插座并从插座拖动到控件而不是其他方式来使其工作。

我知道,这不是很有帮助,但我只是想明确说明这应该可以工作,而当它不起作用时,这肯定是由于 XCode 中的错误造成的。

于 2013-07-05T00:42:33.810 回答
0

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

因此,您可以在 IB 中创建 UIViews 对象,然后在代码中创建相应的类,然后将 IB 中的 UIViews 对象的类更改为您的 UIView 子类。只需将所有 IBOutlets 放入包含所有 UIViews 的 UIViewController 中,从 IBOutlets 获取您需要的值,然后将它们传递给(设置)您的 UIView 子类。

希望这可以帮助。

于 2013-02-17T13:29:24.397 回答
0

我遇到了同样的问题并找到了解决方法:

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

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

3) 将弹出一个创建新插座连接的选项。

4)命名连接并单击连接

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

于 2014-09-09T06:01:39.917 回答