子类 UIView 不显示添加到它的 UIImageViews
Posted
技术标签:
【中文标题】子类 UIView 不显示添加到它的 UIImageViews【英文标题】:Subclassed UIView not displaying UIImageViews added to it 【发布时间】:2012-11-14 03:21:37 【问题描述】:所以我有一个名为 CSImageViews 的类(uiview 的子类),它本质上是包含在单个子类 UIView 中的一行 UIImageViews。
我已经像这样添加了一个自定义的 init 方法(node/yaml 包含 uiimage 名称数据):
- (id)initWithFrame:(CGRect)frame withNode:(NSDictionary *)node
self = [super initWithFrame:frame];
if (self)
_node = node;
_imageViewYAML = [node objectForKey:@"items"];
_imageViews = [self getImageViewsForItems:_imageViewYAML];
return self;
而我的 getImageViewsforItems 就是这样(将它们全部添加到子视图中):
-(NSArray *)getImageViewsForItems:(NSArray *)items
NSMutableArray *ivs = [NSMutableArray arrayWithCapacity:[items count]];
for (int i = 0; i < [items count]; i++)
NSDictionary *item = [items objectAtIndex:i];
NSString *type = [item objectForKey:@"type"];
NSString *name = [item objectForKey:@"name"];
UIImage *image = [UIImage imageNamed:name];
UIImageView *iv = [[UIImageView alloc] init];
iv.image = image;
iv.tag = i;
[ivs addObject:iv];
[self addSubview:iv];
return ivs;
现在,当我像这样将这个自定义视图添加到我的主视图时,什么也没有发生:
CSImageViews *imageViews = [[CSImageViews alloc] initWithFrame:frame withNode:node];
[view addSubview:imageViews];
但是如果我首先将这个“csimageviews”容器添加到一个新的 uiview 中,它就会出现:
CSImageViews *imageViews = [[CSImageViews alloc] initWithFrame:frame withNode:node];
UIView *v = [[UIView alloc] initWithFrame:frame];
[v addSubview:imageViews];
[view addSubview:v];
想法?
【问题讨论】:
为此,您将 v 而不是 imageViews 添加为要查看的子视图。你确定吗? 糟糕,堆栈溢出帖子中的拼写错误(不是我的代码)。什么都没有发生实际上是像您期望的那样添加 imageViews。我也应该澄清一下,似乎确实添加了 imageViews(设置该视图的背景颜色将其变为不同的颜色),但 CSImageViews 中的 UIImageViews 没有出现。 尝试为视图分配一些框架 iv....我不知道我是否正确,但视图应该有一个框架,以明确在其父级中显示它的位置.... 【参考方案1】:我犯的愚蠢错误。在这个特定的子类 UIView 中,我有一个方法,每次显示其父视图控制器时都会调用该方法。这个方法实际上从视图中删除了所有子视图......所以当我在初始视图中渲染它时,我无法看到 uiimageviews...... doh。
【讨论】:
以上是关于子类 UIView 不显示添加到它的 UIImageViews的主要内容,如果未能解决你的问题,请参考以下文章
XIB 中的 UIView 子类不显示(drawRect:从未调用)
Swift 4:防止UIView的子视图移动到它的父节点之外