根据变量使用不同的图像初始化 UIImageView

Posted

技术标签:

【中文标题】根据变量使用不同的图像初始化 UIImageView【英文标题】:Initialising a UIImageView with a different image depending on a variable 【发布时间】:2011-12-20 15:51:17 【问题描述】:

我有一个带有一些单元格的 UITableView。当一个单元格被点击时,我将一个名为 Index 的字符串变量设置为被点击的单元格的索引。我已经验证这与我的 UIImageView 控制器中的索引的 NSLog 一起工作。现在,我要做的是将 UIImageView 的图像设置为与被点击的单元格相对应的图像(即每个单元格的不同图像)。我尝试执行此操作的方式(它不起作用)是在我的 UIImageView 控制器的 ViewDidLoad 方法中使用此代码:

if ([[TableViewController alloc] Index] isEqualToString:@"0"]) 
   Display.image = [UIImage imageNamed:@"0.jpg"]; 
  

'Display' 是我的 UIImageView 的名称。 这段代码正确吗?如果是,我应该把它放在哪里,以便当我点击第一个单元格时,我的 UIImageView 会使用名为“0.jpg”的图像进行初始化?

【问题讨论】:

顺便说一句,如果我只有 ‘Display.image = [UIImage imageNamed @"0"];’ 没有 if 语句,这将有效。 看起来你的视图不知道 [[TableViewController alloc] Index] 是什么意思。我认为您最好的选择是避免这种情况并使用实例变量来设置从 tableView didSelectRow... 方法中选择的行。 【参考方案1】:

我认为您的 if ([[TableViewController alloc] Index] isEqualToString:@"0"]) 将数字(索引)与字符串“0”进行比较。也许应该是这样的:

if ([[TableViewController alloc] 索引] == 0)

【讨论】:

【参考方案2】:

您的图像视图控制器是否已经与表格视图在同一屏幕上可见(已加载),或者您是否为表格视图上的每个单元格点击推送一个新的图像视图控制器?这对如何处理这个问题产生了巨大的影响。如果您正在执行前者,则使用 viewDidLoad 将不起作用,因为视图已经加载。您必须编写一个方法来更改图像,例如:

-(void)changeImage:(NSString *)imageName 
    Display.image = [UIImage imageNamed:imageName];

如果您每次都推送一个新的图像视图,那么您需要在图像视图类中创建一个实例变量并将其放入您的表视图中 didSelectRow... 方法:

myImageView.imageName = [NSString stringWithFormat:@"%d.jpg", indexPath.row];
//now push your view

发布更多代码可能会有所帮助,以便我们了解视图的加载情况。

【讨论】:

我每次都推一个新的 ImageView。 那我肯定会在你的 imageview 类中创建一个实例变量来保存字符串。从您的 tableview 类中设置它,这将起作用。引用您的表格视图类只是自找麻烦。

以上是关于根据变量使用不同的图像初始化 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章

在同一个 UIImageView 中加载多个图像会在显示新图像之前闪烁最后一个图像

初始化为全局/局部变量时,多处理锁的工作方式不同

通过保持纵横比和宽度调整 UIImage 的大小

成员变量和局部变量的区别

systemLayoutSizeFitting 忽略布局约束并使用图像视图固有大小

Xcode 6.3.2 - iOS - 模棱两可的 UIImageView