2011-03-04 20 views
47

您可以使用設備修飾符(即〜ipad)在Info.plist中提供特定於設備的按鍵,並指定特定於設備的啓動圖像(iPhone的Default.png和iPad的Default〜ipad.png , 例如)。在Apple Docs中特別提到了這兩件事,但他們並沒有說這對任何其他類型的文件都有效。iOS:使用設備修飾符來加載xib文件?

我發現(非常偶然),這適用於通過initWithNibName:bundle:加載.xib文件。因此,例如,我可以有MyView.xib和MyView的〜ipad.xib,而這種代碼:

MyViewController *viewController = [[MyViewController alloc] 
            initWithNibName:@"MyView" bundle:nil]; 

...將完全加載MyView的〜ipad.xib在iPad上,並MyView.xib上的其它設備。

所以,1)這是否記錄在某處?我當然找不到任何Apple文檔。它肯定比檢查UI_USER_INTERFACE_IDIOM()更復雜,並且在任何地方硬編碼兩個不同的nib名稱,但如果它沒有記錄,我不相信它。

而且,2)有誰知道iOS的這個版本開始工作了嗎?我只在4.2版本中試過,它在那裏工作。一般設備修改器(即使是上面列出的文檔記錄)最低爲4.0。

+1

不錯的地方。很確定這是4.0以上,當然對於通用應用程序;雖然也許這在iPad上工作3.2?回顧bundle編程指南,它總是使用圖像作爲資源加載的示例,但是再次讀取行之間的內容,可能是所有資源通過應用程序包通過相同機制丟棄而加載? – petert

回答

25

實際上,它是在文檔中明確定義的,但作爲腳註。

CocoaNibs

在在「加載使用一個NSBundle NIB文件」底部注:

注:如果您正在開發iOS版 通用的應用程序,你可以使用 的裝置 - 具體命名爲 約定自動爲底層設備 加載正確的筆尖 文件。有關如何命名你的筆尖文件,請參閱 更多信息 「IOS支持設備特有的 資源。」

哪個環節Cocoa Conceptual LoadingResources

但是,是的,這是一個僅限4.0以上的功能。

2

適用於iOS 3.2及更高版本的技術是UI_USER_INTERFACE_IDIOM()函數。我通常使用三元運算符來啓動帶有相應XIB的UIViewController

UIViewController* controller = [[UIViewController alloc] 
    initWithNibName:UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 
    @"YourViewController-iPad" : @"YourViewController" andBundle:nil]; 
+2

iOS內置了命名機制,因此您不需要包含此三元條件內容。如果您正確命名xib,可以使用簡單的alloc/init。 –

+1

對,使用三元運算符是一個很好的方法,但如果只是正確命名xib可以做同樣的工作,我寧願這樣做。我想我是說,並沒有真正回答我的問題。 – zpasternack

50

我有這個相同的問題。起初答案沒有意義,但好消息是這很容易做到! :)

只需將您的iPad xib命名爲不帶任何修飾符並且您的iphone xib帶有〜iphone修飾符,它就會正確選擇它們。

因此,使用MyViewController,您將擁有iPad的MyViewController.xib和iPhone的MyViewController~iphone.xib。然後你可以用簡單的alloc/init來初始化你的視圖控制器。

[[MyViewController alloc] init]它會抓住正確的xib。

所以,當我在XCode中創建一個新的視圖控制器時,我總是選擇這個盒子來爲ipad設置它的格式,因爲它將創建的xib將被命名爲MyViewController.xib,並且你希望該控制器成爲iPad尺寸的xib 。然後我創建第二個xib,爲iPhone設置格式,並用〜iphone修飾符命名。

這個文檔有時候有點矛盾,但是這個頁面講述了帶標識符的資源如何默認爲iPad。

ImageSoundResources

檢查有關使用高分辨率圖像的部分。我知道我們正在談論xibs而不是圖片,但它確實有效。我的最後6個應用程序都使用這個習慣用法。

+1

這一切都很好,但我的觀點是,在任何官方文檔中都沒有提到資源文件通常使用設備修飾符方式。我希望看到關於行爲的官方文檔和/或關於最低iOS版本的一些官方文檔。 – zpasternack

+0

我覺得你,我從來沒有在文檔中找到任何明確提及xib的內容,但是當我找到上面關於圖像的鏈接文檔時,我決定嘗試一下,希望它也適用於xib ...和中提琴,它做到了......開發自那時起就變得輕而易舉。自從4.0以來,我一直在使用它。對不起,我可以給你最好的! –

3

我討厭被那傢伙和回答我的問題,但我想答案是:

1)不,沒有明確任何蘋果的文檔記錄,並
2)4。0和更高版本(這是基於我自己的測試)

您真正保存的是UI_USER_INTERACE_IDIOM()的幾行代碼檢查。不過,我會接受。代碼越少代碼越少。