之前有人问过,但我找不到明确的答案。
我想设计一个自定义UIView
类。我想在XIB文件中的XCode 4中进行布局。理想的情况是:
我希望能够通过以下方式加载视图:
MyView *v = [MyView myView];
我尝试了很多不同的方法来设置文件所有者并通过NSBundle加载XIB,但我不断获得关键值编码问题。
任何人都可以分享基本方法吗?
我有repo of my current code here。如您所见,它会生成键值编码错误。
答案 0 :(得分:0)
哦,我好像已经弄清楚了。
键如下:
在自定义UIView中,按如下方式加载NIB:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];
UIView *v = [[nib instantiateWithOwner:self options:nil] lastObject];
v.frame = self.frame;
[self addSubview:v];
}
return self;
}
答案 1 :(得分:0)
你究竟如何实例化它?在我的“容器”类中,我有一个自定义视图作为属性的插座,但是当我尝试self.customView = [[CustomView alloc] init];
时
视图没有出现在屏幕上,即使我知道它已正确初始化,因为我可以看到我放入自定义视图的initWithFrame:方法中的NSLog()。
在我的主视图控制器中,在实例化新类之前,视图就像我在故事板中定义的那样:<CustomView: 0x6a83bb0; frame = (38 153; 244 153); autoresize = RM+BM; layer = <CALayer: 0x6a83c60>>
但是,在自定义视图的initWithFrame:中,框架为{{0, 0}, {0, 0}}
,视图为<UIView: 0x68ca160; frame = (0 0; 0 0); autoresize = W+H; layer = <CALayer: 0x68d1800>>
。
初始化完成后,自定义视图的主视图属性几乎为(null)
,这让我感到困惑。
我确定我在这里遗漏了一些非常简单的东西。您是否应该在故事板的主视图中定义自定义视图?
谢谢!