带有 nib 子视图的自定义 UIVIew 无

Posted

技术标签:

【中文标题】带有 nib 子视图的自定义 UIVIew 无【英文标题】:custom UIVIew with nib subviews nil 【发布时间】:2017-01-07 21:12:52 【问题描述】:

我使用 xib 文件创建了一个简单的自定义 UIView,我将 xib 视图连接到我的类,然后将我的 IBOutles 链接到子视图,之后我使用 initWithFrame 创建视图并以编程方式将其添加到我的父视图中

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 
        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"AddAlarmView" owner:self options:nil];
        _scrollView = (UIScrollView *)[objects objectAtIndex:0];
        [self addSubview:_scrollView];

    
    return self;

问题是所有子视图都是 nil....如果我尝试获取 customView.textFeild1 它是 nil....为什么?错误在哪里?

【问题讨论】:

你的 ScrollView 对象是在 xib 中还是 UIView 在 xib 中? 【参考方案1】:

您应该尝试像这样从 Xib 获取您的 UIView 对象。

- (id)initWithFrame:(CGRect)frame

    NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"AddAlarmView" owner:self options:nil];
    self = (YourClassName *)[objects objectAtIndex:0];
    self.frame = frame;
    return self;

您无需在 IBOutLets 中再次添加子视图。它们已经是您在 xib 文件中的视图的子视图。 只需加载该 xib 文件并将其分配给您自己并根据参数更新您的框架。

【讨论】:

我是这样解决的:self = [[[NSBundle mainBundle] loadNibNamed:@"AddAlarmView" owner:self options:nil] lastObject];

以上是关于带有 nib 子视图的自定义 UIVIew 无的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UIView 子类添加 nib 子视图

我的自定义 UIView 没有显示在屏幕上

如何将 UIView 插座连接到自定义子视图

如何在加载了 nib 文件的 UIView 中调整子视图的大小

为啥从自定义 UIView 向 UIButton 添加子视图不显示添加的子视图?

使用来自多个视图控制器的自定义 UIView