识别在iOS循环中创建的UIImageView和UITextView

时间:2013-12-11 22:05:01

标签: ios uiimageview uitextview

我正在使用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属性的替代方法?

我希望自己解释

2 个答案:

答案 0 :(得分:1)

您可以使用tag属性,但不要再使用相同的标记一次。一些小数学应该可以通过标签识别同一行中的视图......

<强> BUT : 我不建议使用标签。让自己成为自定义视图类,例如MyRow,包含属于子视图的6个视图。从那里你可以去任何地方。

遇到问题,发明了一个对象。永远有效。

BIGGER BUT :我强烈建议您使用UICollectionViewUITableView

答案 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]}];