如何继承具有 .xib 文件的自定义视图

Posted

技术标签:

【中文标题】如何继承具有 .xib 文件的自定义视图【英文标题】:How to inherit a custom view which has a .xib file 【发布时间】:2013-10-30 06:46:18 【问题描述】:

有一个自定义视图,由类和 xib 文件组成。我用它作为

[[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil];

问题是如何继承这个自定义视图。

我继承了myViewClass,但是我无法使用上面的代码创建实例。我认为我的方式错误。

【问题讨论】:

【参考方案1】:

一种选择是不在 .xib 文件中创建 MYBaseView 本身,但它是子视图。 这样您就可以轻松继承MYBaseView

如果您以编程方式或在 Interface Builder 中创建视图对象,以下代码应该可以正常工作:

- (id)initWithCoder:(NSCoder *)aDecoder

    self = [super initWithCoder:aDecoder];
    if (self) 
        [self setUp];
    
    return self;


- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 
        [self setUp];
    
    return self;


- (void)setUp

    UIView *view = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil] lastObject];
    [self addSubview:view];

【讨论】:

如果这样,我可以将.xib中的视图链接到MYBaseView吗? 不,.xib 中的视图只是一个 UIView,您应该将 File Owner 链接到 MYBaseView。 酷。我迭代了笔尖的子视图并将它们全部添加为子视图。【参考方案2】:

应该是:

myViewClass *newView = [[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil];

【讨论】:

这是一个数组而不是一个视图。添加 lassObject 或 objectAtIndex:0

以上是关于如何继承具有 .xib 文件的自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

来自 XIB 的自定义 UIView 加载具有巨大规模的子视图

在具有动态高度的 IB uitableviewcell 中使用带有 XIB 的自定义视图

如何响应从 xib 加载的自定义视图中发生的操作?

Swift - 带有 xib 文件的自定义视图,IBOutlet 为 nil

如何用不同的 Xib 替换我的自定义视图

如何使自动布局与 XIB 中的自定义 UIView 一起使用?