关于从 Nib 文件加载 UIView 有很多问题,所以这不是问题。我从 Nib 文件加载 UIView 就好了,问题是,根据我设置视图的方式,我要么没有用户交互,要么 IBActions 导致崩溃。
场景 0:
- (id) init {
self = [super init];
if (self) {
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
结果:这会从 Nib 加载视图,但 UIButtons 不可点击。我还注意到它背后的视图控制器的主视图仍然是交互式的,即使这个视图应该阻止它。
场景 1:更改此行
[self addSubview:self.view]
到
self = (MyView*)self.view;
导致视图阻止其后面的主视图控制器视图,并且按钮子视图变为可点击,但是......当我将按钮的选择器连接到 IBAction 时,它会导致崩溃并出现错误:
-[MyView performSelector:withObject:withObject:]: message sent to deallocated instance 0x12f1cff0
为什么在这种情况下我的视图被解除分配?在有人问之前,我只是像这样添加子视图:
MyView *myView = [[MyView alloc] init];
[self.view addSubview:myView];
编辑:有趣的是,我还注意到 awakeFromNib 从未被调用(在任何一种情况下)。应该是吗?