iOS - 可以包含其他 View 的自定义 View

标签 ios uiview customization nsunknownkeyexception

一段时间以来,我一直在为表格使用自定义单元格(带有它们自己的 Nib )而没有出现任何问题。现在在一个新项目中,我看到需要一个可重用的自定义 View (不是单元格),它有一个标题、一个按钮和另一个 UIVIew 来容纳更多 View 。我将其称为“部分”:

enter image description here

我们的想法是能够在 Storyboard中使用这个部分(使用 UIView 并相应地设置自定义类)。这样,无论我在该 UIView 中放入什么 View ,实际上都将包含在该部分的内部 UIView 中。

我认为困难的部分是使用 IB 和 Storyboard 将 View 实际驻留在该内部 UIView 而不是 Section 的根 UIView 中。结果只是制作自定义 View (还没有任何内部 View )并没有像我预期的那样工作。这是代码,它基于我已经完成和工作过的几十个自定义单元格(尽管针对通用 UIView 的特定初始化方法进行了调整):

#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 将其 Root View 设置为此自定义类(就像我在自定义单元格中所做的那样)

问题

此自定义类导致 EXC_BAD_ACCESS code=2,从我单步执行它可以看出,好像正在递归调用该类。一个接一个地调用 initWithDecoder 直到发生 EXC_BAD_ACCESS 错误

我尝试了什么

  • 鉴于看似递归调用,我尝试了另一种方法,我看到将 XIB 的文件所有者设置为自定义类而不是 XIB 的 Root View 。这导致了以下错误:

'NSUnknownKeyException', reason: '[setValue:forUndefinedKey:]: 此类对于键 sectionContainerView 不符合键值编码

  • 尝试了一种稍微不同的方法(在上面的代码中注释掉了),其中将 XIB 的根添加到自定义类 (addSubView) 而不是设置为它。这并没有改变任何东西,相同的递归调用(或上面的错误,如果已设置)

我真的很感激在这方面的一些指导。谢谢。

最佳答案

您需要在 Storyboard 中使用名为 Custom Container View 的组件。我不能只在这里发布代码,因为它涉及到 Storyboard中的一些配置,并且代码将取决于您如何探索 View /VC,但您可以在此处阅读相关指南:

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

关于iOS - 可以包含其他 View 的自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24093794/

相关文章:

ios - 在 CollectionView 中使用 SDWebImage 的疯狂内存问题(在 tableviewCell 内)

android - 将msvc代码移植到Android/ios

ios - 删除动态创建的 UIButton subview

ios - UIView 上的 UIStoryboard 约束

visual-studio - 输出窗口到文件 (Visual Studio 2005)

ios - 使用 Google Analytics 跟踪混合应用程序

iphone - 每次我尝试通过存档验证我的应用程序时,Xcode 都会不断给我报亭错误

ios - 如何暂停/恢复 NSTIMER?

ios - ios4 中的 TabBar 自定义在 ios5 中不起作用

javascript - 如何在 Wordpress 中自定义选项卡?