0

我有 9 个IBOutlets命名imageView为 imageView1,imageView2,....

我必须将数组的第一个对象分配给 imageView1,将第二个对象分配给 imageView2,.....

现在我的问题是 - 有没有办法遍历属性名称

例子-

 for(int i=0;i<[randomizedArray count];i++)
    {
        NSString *imageViewName=[NSString stringWithFormat:@"%@%i",@"imageView",i];
       imageViewName.image=[appDelegate.splittedImageArray ObjectAtIndex:i];
    }

这意味着它会自动将值分配为

imageView1.image=[appDelegate.splittedImageArray ObjectAtIndex:i];
imageView2.image=[appDelegate.splittedImageArray ObjectAtIndex:i];
4

4 回答 4

3

在不更改 IBOutlets 的情况下,您最接近的可能是这样的:

NSArray *imageViews = @[imageView1,imageView2,imageView3, ...];
for(int i=0; i<[randomizedArray count]; i++) {
    [[imageViews objectAtIndex:i] setImage:[appDelegate.splittedImageArray objectAtIndex:i]];
}

但是有一个更好的解决方案——IBOutletCollection

你可以像这样定义一个属性:

@property (nonatomic, retain) IBOutletCollection(UIImageView) NSArray *imageViews;

并像这样连接所有的 imageViews:

在此处输入图像描述

然后你将有一个包含所有UIImageViews的数组,你可以使用上面的代码而不必手动声明这样的数组...

于 2013-06-05T05:19:42.393 回答
0

不要想的很复杂。这很简单。为imageviews添加标签,例如imageview1的标签1,imageview2的标签2等等。然后运行 ​​for 循环并选择对象并分配给数组。就这样。

就像假设您将标签从 1 放置到 7 (不要为您的任何视图放置重复的标签或 0)

NSMutableArray *arr = [[NSMutableArray alloc] init];
for(int ii = 1; ii<=7; ii++){
    UIImageView *imgView = (UIImageView *)[self.view viewWithTag:ii];
    [arr addObject:imgView];
}
yourArray = arr;
[arr release];//if your array is a property otherwise no need to release.

希望这会帮助你。

于 2013-06-05T05:18:17.907 回答
0

采用 NSClassFromString

 for(int i=0;i<[randomizedArray count];i++)
    {
        NSString *imageViewName=[NSString stringWithFormat:@"%@%i",@"imageView",i];
       Class theClass = NSClassFromString(imageViewName);

       theClass.image=[appDelegate.splittedImageArray ObjectAtIndex:i];
    }
于 2013-06-05T05:18:53.700 回答
0

我曾经这样做的一种方法。创建了 IBOutlets 数组,以便您可以遍历它并分配相应的图像。

for(int i=0;i<[randomizedArray count];i++)
 {
     UIImageView *imageView=[imageOutlets objectAtIndex:i];
     UIImage *image=[images objectAtIndex:i];
     imageView.image=image;
 }
于 2013-06-05T05:19:07.587 回答