以编程方式将一堆自定义视图从 XIB 添加到 UIStackView

Posted

技术标签:

【中文标题】以编程方式将一堆自定义视图从 XIB 添加到 UIStackView【英文标题】:programmatically add a bunch of custom view from XIB to UIStackView 【发布时间】:2015-11-01 18:01:18 【问题描述】:

我有一个 TagDisplayCell.xib 和关联的 TagDisplayCell.m。在.m 文件中,我像这样加载视图。

- (id)initWithCoder:(NSCoder *)aDecoder
    self = [super initWithCoder: aDecoder];
    if(self)
        //load the interface file from .xib
        [[NSBundle mainBundle] loadNibNamed:@"TagDisplayCell" owner:self options:nil];

        //add as subview
        [self addSubview:self.view];

        self.view.translatesAutoresizingMaskIntoConstraints = NO;

        [self addConstraint:[self pin:self.view attribute:NSLayoutAttributeTop]];
        [self addConstraint:[self pin:self.view attribute:NSLayoutAttributeLeft]];
        [self addConstraint:[self pin:self.view attribute:NSLayoutAttributeBottom]];
        [self addConstraint:[self pin:self.view attribute:NSLayoutAttributeRight]];
    

    return self;

在我的视图控制器中,有一个垂直的UiStackView(以便内容按行堆叠)。我想将TagDisplayCell 的几个实例添加到此 UiStackView。这就是我正在做的事情。

//create all the views 
for(int i=0; i<[commentsAndTagsArray count]; i++)

    NSObject *obj =commentsAndTagsArray[i];
    if ([obj isKindOfClass:[Tag class]])
    
        Tag *tempTag = ((Tag*) obj);
        TagDisplayCell *tempTagCell = [[TagDisplayCell alloc] initWithFrame:frame];
        [uiStackView addSubview:tempTagCell];
    

当我运行它时,屏幕上什么都没有显示。我在这里错过了什么?

更新:这是我的 TagDisplayCell.xib"

【问题讨论】:

【参考方案1】:

当您在 View 子类上调用 initWithFrame: 时,它不会从 XIB 加载。

以与您在第一个代码 sn-p 中相同的方式执行视图的加载:

TagDisplayCell *tempTagCell = (TagDisplayCell *)[[[NSBundle mainBundle] loadNibNamed:@"TagDisplay" owner:nil options:nil] firstObject];

【讨论】:

这条线我遇到了崩溃。我认为我的选角不正确。我用 TagDisplayCell.xib 的图像更新了我的问题 是的,看起来你有一个***对象 UIView,而不是 TagDisplayCell。将 TagDisplayCell 显式优先于 UIView 是否有特别重要的意义? TagDisplayCell.xib 将 Files Owner 设置为 TagDisplayCell。 TagDisplayCell.m 有一些方法可以进行颜色更改等。我想我不明白。附加文件所有者不连接类和 XIB 吗? 您做错了,因为您的 Cell 是一个视图,并且通常该视图是 XIB 中的***对象。因此,您可以将***对象的类更改为您的 TagDisplayCell 类。

以上是关于以编程方式将一堆自定义视图从 XIB 添加到 UIStackView的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中以编程方式从 MainViewController 切换到 .xib 视图?

UIToolbar xib xcode

performSegueWithIdentifier 触发,但不显示

将 UIView 从 xib 添加到 UIScrollView

iOS - 从 XIB 文件中引用和以编程方式移动视图

Swift - 以编程方式向堆栈视图添加标签