尝试以编程方式从一个 XIB 文件创建多个视图
Posted
技术标签:
【中文标题】尝试以编程方式从一个 XIB 文件创建多个视图【英文标题】:Trying to create multiple views from one XIB file programmatically 【发布时间】:2014-05-19 18:37:54 【问题描述】:我有一个启用页面的滚动视图,我想用UIViews
填充它。我曾尝试创建一个“XIB”文件并在 for 循环中从中加载,但这只会在我的滚动视图中给我一个 UIView
。
int amount = garments.count;
[self.pageControl setNumberOfPages:amount];
for (int i = 0; i < amount; i++)
DOVGarment *garment = garments[i];
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * i;
frame.size = self.scrollView.frame.size;
DOVGarmentDetailView *view = [DOVGarmentDetailView new];
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"detailView" owner:view options:nil];
view = [topLevelObjects objectAtIndex:0];
view.image.image = [UIImage imageNamed:garment.fileName];
view.labelID.text = garment.ID;
[self.scrollView addSubview:view];
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * amount, self.scrollView.frame.size.height);
有人知道为什么这不起作用吗?或者如果这是可能的?
【问题讨论】:
您正在创建多个视图,但您没有更改框架,因此它们都将直接放置在彼此之上。 哇,非常感谢。这解决了它。 【参考方案1】:您正在创建多个视图,但您没有更改框架,因此它们都将直接放置在彼此之上。
更新您的代码以使每个视图相对于之前创建的视图偏移
【讨论】:
【参考方案2】:您放置在 xib 文件中的每个视图对象都只有一个实例。因此,您的 for 循环的每个运行周期都在访问同一个 UIView 实例。 如果您需要用视图填充滚动视图,则需要在 for 循环的每个运行周期中重新分配和初始化,从而创建许多 UIView 实例。
我就是这样做的,将 UIViews 水平放置在我的 scrollView 中 -
for (int i = 0; i<numberOfViews; i++)
UIView*smallView = [[UIView alloc]initWithFrame:CGRectMake((i*scrollview.frame.size.width+heightOfYourView), 0, scrollview.frame.size.width, scrollview.bounds.size.height)];
[scrollview addSubview: smallView];
scrollview.contentSize = CGSizeMake(numberOfViews*scrollview.frame.size.width, scrollview.frame.size.height);
【讨论】:
感谢您的回答。我知道这个解决方案,但是我正在寻找一种方法来生成多个视图,我可以在 XIB 中进行类似的样式设置。你有什么见解吗?以上是关于尝试以编程方式从一个 XIB 文件创建多个视图的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式创建的 UIViewController 加载界面构建器 view.xib 文件
从 xib 加载 UITableViewCell 会导致加载 nib 但未设置视图出口