以编程方式将一堆自定义视图从 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 视图?
performSegueWithIdentifier 触发,但不显示