2011-08-16 73 views
3

創建UIImageView我有一個複選標記的圖像作爲.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

你檢查了圖像視圖的框架,以確保它有一些寬度和高度? – jtbandes

回答

7

imageWithContentsOfFile:需要指向文件的路徑。如果你只是給它一個文件名,它會在當前目錄中查找文件,但說實話,我不知道當前目錄通常在iOS應用程序中,或者即使有任何保證。

問題是,您需要給它一個文件的絕對路徑或使用imageNamed:,它只需要一個名稱並查看主包的資源。

換句話說:

UIImage *image = [UIImage imageNamed:@"checkmark"]; 
UIView *view = [[UIImageView alloc] initWithImage:image]; 

imageNamed:另一個優點是,它會緩存圖像(如果你再次使用它),它會自動尋找一個[email protected]版本,如果您的設備具有Retina顯示屏。

如果不希望這種行爲,你可以直接得到的路徑:

NSString *imagePath = [[NSBundle mainBundle] pathForResourceNamed:@"checkmark" ofType:@"png"]; 
UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; 

這通常是一個更好的選擇,如果它是一個大的圖像,你不想緩存它(因爲你贏了經常使用它)。

1

如果您使用imageWithContentsOfFile:方法,您需要具有文件路徑。如果圖像位於主包中,則以下操作將會執行絕招:

UIView * v = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]]; 
1

請確定您已添加圖片文件到您的XCode項目。將它放在同一個目錄中是不夠的。在XCode中,選擇文件菜單,然後選擇「添加文件到......」您的項目。