0

已更新向下滚动以更清楚地查看重新提出的问题......如果我将特定 UIImageView (IBOutlet) 的名称存储在变量中,我如何使用它来更改显示的图像。我试过这个,但它不起作用。

我对 iphone 编程还是新手,所以任何帮助将不胜感激。

NSString *TmpImage = @"0.png";
NSString *Tst = @"si1_1_2";

TmpImage = @"1.png";
UIImage *sampleimage = [[UIImage imageNamed:TmpImage] retain];


((UIImageView *) (Tst)).image = sampleimage;    // This is the line in question 
[sampleimage release];

重述:

我在屏幕上有一堆图像.... UIImageView *s1、*s2、*s3 等直到 *s10
现在假设我想将每个显示的图像更新为相同的图像。
而不是做
s1.image = sampleimage;
s2.image = sampleimage;
:
s10.image = sampleimage;

我如何编写一个从 1 到 10 的 for 循环,然后使用循环 var 作为更新图像的行的一部分。
像这样的东西。
对于 ( i = 1; i <- 10; ++i )
s(i).image = sample; // 我知道这行不通


基本问题是如何将变量合并为语句的一部分以访问图像?不要挂断我的例子。主要问题是如何使用变量作为访问某些元素/对象的一部分。

底线...如果我可以将 UIImageView 的名称构建到 NSString 对象中,那么我该如何使用该 NSString 对象来操作 UIImageView。

谢谢!

4

1 回答 1

1

啊! 您有问题的线路:

((UIImageView *) (Tst)).image = sampleimage;

正在将字符串指针转换为 UIImageView 指针-您基本上是在说指向字符串的指针实际上是指向 UIImageView 的指针!它会编译(因为编译器会愉快地接受你的断言)但当然会在运行时崩溃。

你需要声明一个 UIImageView 类型的变量。然后,这可以保存您要为其设置图像的任何视图。因此,您的代码可能如下所示:

NSString *TmpImage = @"0.png";
UIImageView *myImageView;

If (someCondition == YES) {
    myImageView = si1_1_2;  //Assuming this is the name of your UIImageView
} else {
    myImageView = si1_1_3;  //etc
}

UIImage *sampleimage = [UIImage imageNamed:TmpImage];  //no need to retain it
myImageView.image = sampleImage;

希望这是有道理的!

编辑:我应该补充一下,你为什么要拥有多个 UIImageViews?因为 UIImageView 的图像可以随时更改(实际上可以容纳很多),那么只有一个 UIImageView 并更改其中的图像不是更好吗?

于 2009-08-27T15:48:38.280 回答