【发布时间】:2013-02-01 20:23:11
【问题描述】:
使用 Xcode 4.3.3,我无法弄清楚如何将自定义 UIView 类中的插座与在 Interface Builder 中创建的对象连接起来。
在一个 ViewController 中,我有各种按钮、滑块等,我正试图将它们组合到视图中。所以,在 IB 的那个 ViewController 中,我添加了 3 个视图。在任何给定时间,只有 1 个视图可见。
我派生了自定义 UIView 类来处理这 3 个视图中的每一个。我的视图控制器实例化了每个类。我在 IB 中选择了视图,打开了身份检查器并将类设置为我的自定义类。但是,当我尝试将连接从视图和/或其组成控件拖到自定义视图的 .h 文件时,IB 不会添加连接。
IB 允许我通过拖动到父视图控制器的 .h 文件来添加出口/操作,但不能拖动到自定义视图的 .h 文件。我想一旦我将视图的类设置为我的自定义类,我可以将视图组件的出口拖到我的自定义类而不是视图控制器中。
这个问题似乎与我的相同: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 而不是视图控制器,我还需要设置/检查什么?
【问题讨论】:
-
膨胀。所以,我当然可以手动定义创建一个控件,比如滑块,并将其放置在我想要的位置。但是,如何以编程方式将操作(如值更改)设置为自定义类中的函数?我会设置 slider.delegate = myCustomView 吗?
-
老实说,我不知道。我讨厌 Interface Builder,而且我很少使用它。要以编程方式添加操作,请使用
UIControl的addTarget:action:forControlEvents:方法。 -
为什么不直接使用
self而不是使用 *view3 给自己一个 IBOutlet? -
@Thunk 你在这方面有什么进展吗?我在 XCode 4.6 中看到类似的东西,即使
clang编译成功,IB 也不会接受我的UIView子类的名称(它会发出哔哔声)。 -
@trojanfoe 否定的。自从我向 Apple 提交了错误后,没有什么有用的报告。
标签: iphone ios ipad uiview iboutlet