2010-11-07 26 views
4

在Xcode中,我使用目標來發布多個應用程序版本,這些應用程序版本共享一些基本代碼並且傾向於具有不同的圖形。界面生成器:根據目標選擇媒體

。假裝我的目標是JOHN,目標DOE。我可以將名爲example.png的不同圖像添加到捆綁包中,並分別針對每個圖像。代碼不需要以這種方式進行任何更改。

UIImageView *image = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"example.png"]]; 

如果不是我叫每個不同版本的每個圖像我最終會得到類似這樣的東西:

NSString *imageName; 

#ifdef JOHN 
imageName = @"johnExample.png"; 
#else 
imageName = @"doeExample.png"; 
#endif 
UIImageView *image = [UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]]; 

有好幾個版本,很多圖片這個方法很快就會亂,具有常數一個巨大的文件在我看來像一個矯枉過正的,所以我最終選擇了第一個選項。

的問題是:

雖然筆尖上的文件時,Interface Builder中只出現加載example.png隨機。所以如果我正在處理目標JOHN這是一個煩惱,IB只是決定從DOE目標加載example.png

Interface Builder根據目標加載媒體有什麼方法嗎?

回答

1

就關閉該問題,答案是:

截至2011年1月,您無法在Interface Builder上加載基於目標的媒體,但您可以使用一些解決方法,如Digital Robot和我在問題中指出的自己的描述。

0

爲何沒有在代碼的開頭這樣定義

#ifdef JOHN 
#define APP @"john" 
#elseif DOE 
#define APP @"doe" 
#endif 

,然後,你想用這個每一次,你可能有...

imagename = [NSString stringWithFormat:@"%@Example.png", APP]; 
+0

我試圖避免這樣的事情,但無論如何感謝。 – pablasso 2011-01-25 13:42:58

0

這應該工作。這可能是新的,因爲一段時間過去了,我剛剛纔瞭解到這一點。不知道這是可能的很久以前,當你acutally問這個問題:)但它可能是有用的尋找解決方案的其他人。

將目標添加到xcode中的項目時,它會在文件系統中創建一個子文件夾。每個taragt都有一個子文件夾。據我所知,基本思想是,所有常用文件位於項目主目錄的上層,每個目標的獨立文件位於各自的目錄中。

(如文件的本地化版本的位。)

所以,你可以將約翰的形象example.png中/項目/約翰·多伊和的形象,example.png中/項目/ DOE。 您應該仔細檢查每個圖像的正確版本是否包含在每個目標的構建設置中。 (Copy Boundle Resources) 這樣做「example.png」只在綁定中包含一次。隨機加載一個或另一個圖像應該不會再發生,儘管您在代碼中將其稱爲「example.jpg」。