将 xib 中的子视图添加到自定义 UIView

Posted

技术标签:

【中文标题】将 xib 中的子视图添加到自定义 UIView【英文标题】:Add a subview in xib to a custom UIView 【发布时间】:2012-07-20 04:59:33 【问题描述】:

首先,我有一个存在Asset.m/Asset.h,它是subclass of UIView。然后我创建一个空的 xib 文件并将 xib 文件的所有者类更改为 Asset。然后我为这个xib创建一个视图和一个标签,我可以在UIView中拖拽创建IBOutlet

IBOutlet UIView *videoOverlay;
IBOutlet UILabel *videoTimeLable;

然后我想使用 addSubviewvideoOverlay 添加到 Asset.m 的视图中。

self = [super initWithFrame:CGRectMake(0, 0, 0, 0)];
        [self addSubview:videoOverlay];

但是视图——videoOverlay 没有显示出来。

我打印出videoOverlay的大小,全为0:

    NSLog(@"width =%f height= %f", videoOverlay.frame.size.width, videoOverlay.frame.size.height);

为什么?

【问题讨论】:

试试 [self.view addSubview: videoOverlay] 看来已将大小设置为零,不是吗? CGRectMake(0, 0, 0, 0);:D 是的,但是 videoOverlay 在 xib 文件中有大小。 Asset是一个UIView,所以没有self.view,本身就是一个view。 【参考方案1】:

最后,我自己找到了解决方案。在代码下使用添加这个视图(videoOverlay和videoTimeLable属于这个视图)在:

UIView *thumbs;
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ELCAsset" owner:self options:nil];
    thumbs = [nib objectAtIndex:0];
    [self addSubview:thumbs];

然后videoOverlay和videoTimeLable就可以出现了。

【讨论】:

以上是关于将 xib 中的子视图添加到自定义 UIView的主要内容,如果未能解决你的问题,请参考以下文章

使用 xib 将 tapGestureRecognizer 添加到自定义 UIView

xcode - 将 xib 文件附加到自定义 UIView 类时出错

是否可以将 GestureRecognizer 添加到自定义 UIView 子视图中的标签

将 IBoulets 添加到自定义 UIView 子类崩溃“不符合键值”

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

XIB 中的 UIView 子类不显示(drawRect:从未调用)