我有这两段代码。第一个完美无缺:
UIView *tmp = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 60.0f, 296.0f, 44.0f)];
[self.dynamicView addSubview:tmp];
[tmp release];
第二个几乎相同,但视图没有出现。
CommentBox *commentBox = [[CommentBox alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 296.0f, 44.0f)];
[self.dynamicView addSubview:commentBox];
[commentBox release]; // Why does this remove the view?
如果我删除了[commentBox release]
该视图会出乎意料地出现。但我认为这两个代码片段没有区别。
CommentBox的init如下所示:
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// Load the nib:
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"CommentBox" owner:self options:nil];
self = [nibObjects objectAtIndex:0];
}
return self;
}
答案 0 :(得分:3)
在考虑了格雷厄姆的回答后,我提出了以下解决方案:
在代码中,我现在在-initWithFrame:
NSArray * nibObjects = [[NSBundle mainBundle] loadNibNamed:@“CommentBox”owner:self options:nil]; UIView * subView = [[nibObjects objectAtIndex:0] viewWithTag:300]; [self addSubview:subView];
希望有所帮助。
<强>更新强>
我还有另一个想法。您也可以在IBOutlet UIView *viewHolder
类中创建CommentBox
而不是标记号,而在IB中设置出口。然后在initWithFrame:
我执行以下操作:
[[NSBundle mainBundle] loadNibNamed:@"CommentBox" owner:self options:nil];
[self addSubview:self.viewHolder];
答案 1 :(得分:2)
你在-initWithFrame:
做了一些奇怪的事情。我不是100%确定它会导致你报告的问题,但我很确定它是:
我不认为用-init…
方法中的nib替换一个视图对象是一个好主意。从控制器类加载nib,或让初始化程序从nib加载对象的子视图而不替换self
。