我在项目的同一目录中有一个复选标记图像作为.png,名为“checkbox.png”。我想用该图像作为背景创建一个UIImageView,并将其设置为一组UITableViewCells的附件视图。我目前有:
UIView * v = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkmark.png"]];
v.backgroundColor = [UIColor redColor];
cell.accessoryView = v;
[v autorelease];
哪个不行。我可以制作另一个虚拟UIView(例如
v = [[UIView alloc] init];
v.backgroundColor = [UIColor redColor];
工作正常,它在我的uitableviewcells的右侧显示一个小红框。我不确定为什么带有复选框的视图不起作用。我指定文件路径的方式有问题吗?
答案 0 :(得分:7)
imageWithContentsOfFile:
需要文件的路径。如果您只是给它一个文件名,它将在当前目录中查找该文件,但说实话,我不知道当前目录通常在iOS应用程序中是什么,或者即使有任何保证。
关键是,您需要为其提供文件的绝对路径,或者使用imageNamed:
,它只需要一个名称并查看主要包的资源。
换句话说:
UIImage *image = [UIImage imageNamed:@"checkmark"];
UIView *view = [[UIImageView alloc] initWithImage:image];
imageNamed:
的另一个优点是它会缓存图像(如果您再次使用它),如果您的设备有Retina显示屏,它会自动查找checkmark@2x
版本。
如果您不想要此行为,可以直接获取路径:
NSString *imagePath = [[NSBundle mainBundle] pathForResourceNamed:@"checkmark" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
这通常是一个更好的选择,如果它是一个大图像而你不想缓存它(因为你不会经常使用它)。
答案 1 :(得分:1)
如果使用imageWithContentsOfFile:方法,则需要具有文件路径。如果图像在您的主要包中,那么以下内容将起到作用:
UIView * v = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]];
答案 2 :(得分:1)
确保已将图像文件添加到XCode项目中。将它放在同一目录中是不够的。在XCode中,选择文件菜单,然后选择“将文件添加到...”项目。