有很多关于从Nib文件加载UIViews的问题,所以这不是问题。我从Uib文件加载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不可点击。我还注意到,后面的View Controller的主视图仍然是交互式的,即使这个视图应该阻止它。
场景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从未被调用(在任一场景中)。应该是吗?
答案 0 :(得分:1)
指定的初始化程序是initWithFrame
除此之外:: IBOutlet如何进行查看?