2016-11-23 37 views
0

对于每个UIImageView,我想添加标签子视图到它。 这是我的类继承的形式的UIImageViewObjective-C:添加子视图只适用于一个视图

-(instancetype)initWithFrame:(CGRect)frame 
{ 
if (self=[super initWithFrame:frame]) { 
    self.categoryLabel=[[UILabel alloc]initWithFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, 50)]; 

    self.categoryLabel.textAlignment=NSTextAlignmentCenter; 
    self.categoryLabel.font=[UIFont systemFontOfSize:20]; 
    self.categoryLabel.textColor=[UIColor whiteColor]; 

    [self addSubview:self.categoryLabel]; 
    NSLog(@"%@",self.subviews); 
} 
return self; 
} 
-(void)setModel:(HorizontalModel *)model 
{ 
_model=model; 
self.categoryLabel.text=self.model.category; 
[self sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"XXXXX%@",self.model.imgURL]] placeholderImage:[UIImage imageNamed:@"obama"]]; 
    } 

这是我的视图中的控制器的代码。

-(void)addImage:(NSNotification *)notification 
{ 
self.HArrayLists=notification.userInfo[@"array"]; 
for (int i=0; i<[self.HArrayLists count]; i++) { 
    JTImageView *imageView=[[JTImageView alloc] initWithFrame:CGRectMake(i*310, 0, 300, 200)]; 
    imageView.model=[HorizontalModel restaurantsDetailWithDict: self.HArrayLists[i]]; 
    [self.mediaScrollView addSubview:imageView]; 
} 
self.mediaScrollView.contentSize=CGSizeMake(310*[self.HArrayLists count], 0); 

} 

事实证明,只有第一个imageView显示一个标签,而其余的imageViews只显示图像。

+1

您确定HArrayLists中的所有数据都包含所有条目的文本吗?只要调试,你可以这样做:imageView.categoryLabel.text = @“Test”;并注释掉imageView.model =部分。很可能你的数据是@“”,所以没有什么可以显示 – GeneCode

+0

赞同Rocotilos;也考虑使用self.HArrayLists的-enumerateObjectsUsingBlock方法;它看起来更清洁 \t [self.HArrayLists enumerateObjectsUsingBlock:^(HArrayListsInst * OBJ,NSUInteger IDX,BOOL *停止){ \t}]; –

+0

为什么你看到self.mediaScrollView高到0? –

回答

1

我觉得你的问题的核心是线路:

self.categoryLabel=[[UILabel alloc]initWithFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, 50)]; 

您抵消x和x和图像的y值标签的y位置。这会将它们放置在图像区域之外并与图像剪辑一起使其不可见。我认为该行应该是

self.categoryLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, 50)]; 

将所有标签放置在每个图像的左上角。

说了这么多,我还想提供一些建议。

首先使所有变量名以小写字母开头。所以self.HArrayLists应该是self.hArrayLists

其次尝试使变量名称与其内容匹配。所以再看看self.HArrayLists,或许就像self.imageData

接下来我会以不同的方式完成构图。我将有一个UIView我添加了UILabelUIImageView实例。使用这样的父视图来布置两个子视图通常会使生活更轻松。

我也会考虑使用UICollectionViewUICollectionViewController而不是UIScrollView。您需要做一些工作才能让您了解集合视图的工作方式。但是,您将获得更好的性能和更好的布局管理。

最后,研究约束条件。它们是构建现代应用程序的重要组成部分,可以轻松适应不同大小的屏幕,旋转和布局。

+0

另外,你可以使用界限而不是框架,因为这里面的视图,而不是外面是它听起来像你想要的。我喜欢这里使用UICollectionView的建议。它将完成你想要的东西,正如drekka所说,你在性能和布局管理方面获得了很多。使用dequeueCellWithReuseIdentifer()的好处非常惊人!:) [UICollectionView](https://developer.apple.com/reference/uikit/uicollectionview?language=objc) –

0

您需要正确设置为categoryLabelframe

self.categoryLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, frame.origin.y, frame.size.width, 50)]; 
相关问题