我正在使用Xcode,我有一个循环周期,我在其中动态创建UIImageViews和UITextviews并将它们插入到UIScrollView中。在每一行中,我创建了4个UIImageViews和2个UITextViews,因此代码如下所示:
for (int i=0; i<dim; i++){
UITextView *textView1= [[UITextView alloc] initWithFrame:CGRectMake(0, 0, screenWidth/2, 37)];
UITextView *textView2= [[UITextView alloc] initWithFrame:CGRectMake(screenWidth/2, 0, screenWidth/2, 37)];
UIImageView *imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(0,50,screenWidth/4,100)];
UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(screenWidth/4,50,screenWidth/4,100)];
UIImageView *imageView3 = [[UIImageView alloc] initWithFrame:CGRectMake(screenWidth/2,50,screenWidth/4,100)];
UIImageView *imageView4 = [[UIImageView alloc] initWithFrame:CGRectMake(screenWidth*3/4,50,screenWidth/4,100)];
}
在UIImageViews中设置图像的代码,UITextViews中的文本以及在UIScrollView中显示它们的代码效果很好,我不发布它因为它太长了。
我的问题是:当我点击一个图像时,我会调用我想要对同一行的ImageViews和TextViews进行更改的方法,我该如何识别它们?
使用识别器.view检测单击图像不是问题,检测同一行的其他图像我试图为视图设置标签,然后调用“viewWithTag”找到它们,但我有问题,因为同一行的元素具有相同的标记值,我会混淆。
我的目标是例如:
当我点击第一行中的imageView1时,应该更改同一行的imageView3中的图像。
当我点击第四行中的imageView3时,应该更改同一行的textView2中的文字。
依此类推..
有没有使用tag属性的替代方法?
我希望自己解释
答案 0 :(得分:1)
您可以使用tag属性,但不要再使用相同的标记一次。一些小数学应该可以通过标签识别同一行中的视图......
<强> BUT 强>:
我不建议使用标签。让自己成为自定义视图类,例如MyRow
,包含属于子视图的6个视图。从那里你可以去任何地方。
遇到问题,发明了一个对象。永远有效。
BIGGER BUT :我强烈建议您使用UICollectionView
或UITableView
。
答案 1 :(得分:0)
UIView
有一个“tag”属性,您可以将其用于任何您想要的内容。默认值为0
,除了存储值外,它根本不执行任何操作。
通常,您可以将标记设置为数组索引。
所以你可以这样做:
textView1.tag = i;
textView2.tag = i;
imageView1.tag = i;
imageView2.tag = i;
imageView3.tag = i;
imageView4.tag = i;
或者更聪明的东西,比如:
textView1.tag = 1000000 + i;
textView2.tag = 2000000 + i;
imageView1.tag = 3000000 + i;
imageView2.tag = 4000000 + i;
imageView3.tag = 5000000 + i;
imageView4.tag = 6000000 + i;
或者你可能有一个映射它们的数组属性:
@property NSMutableArray tagMap;
textView1.tag = self.tagMap.count;
[self.tagMap addObject:@{@"var": @"textView1", @"index":[NSNumber numberWithInteger:i]}];