编辑#1
请阅读问题底部的编辑#1;我试图弄清楚 nib 可用于创建自定义视图的所有方式,因此所有示例都处理 nib 文件。
结尾
我一直在尝试找出在控制器中创建使用 nib 的自定义视图的所有技术。我已经在这个问题的底部列出了这些方法。
这是我的 TRtestview 的代码(我如何进行此设置的一个含义是总是会调用 initWithCoder):
// TRtestview.m
-(id)initWithCoder:(NSCoder *)aDecoder{
self=[super initWithCoder:aDecoder];
if (self) {
if (self.subviews.count == 0) {
UIView *myView=[[[NSBundle mainBundle] loadNibNamed:@"testview" owner:nil options:nil] lastObject];
myView.userInteractionEnabled=YES; // doesn't do anything
[self addSubview:myView];
}
}
NSLog(@"about to return here in initWithCoder");
return self;
}
编辑 1
-(void)setup
{
UIView *myView=[[[NSBundle mainBundle] loadNibNamed:@"testview" owner:nil options:nil] lastObject];
[self addSubview:myView];
}
- (id)initWithFrame:(CGRect)frame
{
NSLog(@"at top of initWithFrame");
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
在 TRViewController.m 中,我尝试将 thisView 设置为 userInteractionEnabled 但并没有改变:
- (void)viewDidLoad
{
[super viewDidLoad];
self.thisView.userInteractionEnabled=YES;
这适用于调用 initWithFrame(技术 #1)和 loadNibNamed(技术 #2)的场景。它将通过将视图从对象检查器中拖出然后在自定义类属性检查器中设置类来加载视图(技术#3)。但是,该按钮不起作用,因此这种方式不起作用。
如何使用技术#3 创建一个带有笔尖的自定义视图并允许用户交互?
谢谢
编辑 1
我真的很想了解可以创建和实例化自定义视图的所有方式。理想情况下,我希望能够拥有可以通过 initWithFrame、loadNibNamed 创建或从对象库中拖动的自定义视图。
场景似乎是:
- 来自 ViewController 的 initWithFrame;如果与笔尖一起使用,我会在我的 initWithFrame 中调用 loadNibNamed - 我需要防止递归加载
- 来自 ViewController(将调用 initWithCoder)的 loadNibNamed 并且只想加载一次
- 拖动 UIView 的实例,然后将自定义类设置为我的自定义 UIView(在本例中为 TRtestview)。这将调用 initWithCoder。