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

时间:2015-11-01 18:01:19

标签: ios objective-c xib uistackview

我有一个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(以便内容按行堆叠)。我想在此UiStackView中添加TagDisplayCell的几个实例。这就是我在做的事。

//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&#34; enter image description here

1 个答案:

答案 0 :(得分:0)

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

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

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