一段时间以来,我一直在为表格使用自定义单元格(带有自己的笔尖)而没有问题。现在在一个新项目中,我看到需要一个可重用的自定义视图(不是单元格),它会有一个标题、一个按钮和另一个 UIVIew 来保存更多视图。我将其称为“部分”:
这个想法是能够在故事板中使用这个部分(使用 UIView 并相应地设置自定义类)。这样,我在 UIView 中放置的任何视图实际上都将包含在 Section 的内部 UIView 中。
我认为困难的部分是实际使用 IB 和 Storyboard 放置视图以实际驻留在内部 UIView 而不是 Section 的根 UIView 中。结果只是制作自定义视图(还没有任何内部视图)并没有像我预期的那样工作。这是代码,它基于我已经完成和工作的数十个自定义单元格(尽管针对通用 UIView 的特定 init 方法进行了调整):
#import "SectionContainer.h"
@implementation SectionContainer
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"SectionContainer" owner:self options:nil];
self = [nibArray objectAtIndex:0];
/*NSArray *nibRoot = [[UINib nibWithNibName:@"SectionContainer" bundle:nil] instantiateWithOwner:self options:nil];
[self addSubview:[nibRoot objectAtIndex:0]];*/
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"SectionContainer" owner:self options:nil];
self = [nibArray objectAtIndex:0];
/*NSArray *nibRoot = [[UINib nibWithNibName:@"SectionContainer" bundle:nil] instantiateWithOwner:self options:nil];
[self addSubview:[nibRoot objectAtIndex:0]];*/
}
return self;
}
匹配的 XIB 将其根视图设置为此自定义类(就像我在自定义单元格中所做的那样)
问题
这个自定义类会导致 EXC_BAD_ACCESS 代码=2,从我可以通过逐步了解的情况来看,就好像该类被递归调用一样。在调用 initWithDecoder 之后调用,直到发生 EXC_BAD_ACCESS 错误
我试过的
- 鉴于看似递归调用,我尝试了另一种方法,我看到将 XIB 的文件所有者设置为自定义类而不是 XIB 的根视图。这导致了以下错误:
'NSUnknownKeyException',原因:'[setValue:forUndefinedKey:]:此类不符合键 sectionContainerView 的键值编码
- 尝试了一种稍微不同的方法(在上面的代码中注释掉),将 XIB 的根添加到自定义类(addSubView)而不是设置为它。这并没有改变任何东西,相同的递归调用(或者如果设置了上面的错误)
我真的很感激这方面的一些指导。谢谢你。