2010-07-08 61 views

回答

4

布拉德的解決方案是絕對正確的。如果您正在構建一款通用應用程序,該應用程序可以在具有較早版本的操作系統的iPhone上運行,還可以使用最新版本的iPads和iPhone,但您可能需要添加此代碼以捕捉未定義慣用語的情況。

// If iPhoneOS is 3.2 or greater then __IPHONE_3_2 will be defined 
#ifndef __IPHONE_3_2  

typedef enum { 
    UIUserInterfaceIdiomPhone,   // iPhone and iPod touch 
    UIUserInterfaceIdiomPad,    // iPad 
} UIUserInterfaceIdiom; 

#define UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPhone 

#endif // ifndef __IPHONE_3_2 
+3

只有當應用程序使用較舊的SDK構建時,才需要這樣做。如果您正在構建3.2+並定位3.x,則不需要額外的代碼。看到蘋果如何要求你使用4.0 SDK來構建應用程序商店,你不應該需要這個代碼。 – 2010-07-08 16:03:16

+2

在較早的操作系統設備上,該函數僅計算爲0,這會導致相等語句正常工作,就像檢測到非iPad設備一樣。因此,即使在較早的操作系統上,它也能按預期工作。 – 2010-07-08 16:05:15

+0

謝謝。這有助於。我在我的iMAC上安裝了SDK 4,但我的iPhone仍然有3.1.2。所以這將是重要的。我沒有iPAD(應用程序使用iPhone的相機和iPAD的照片庫)。我可以從某個地方「租賃」iPAD,因爲我不想在沒有在真實設備上測試的情況下發布該應用。 – 2010-07-09 09:52:53

33

強烈建議不要用於確定是否該應用程序在iPad運行做設備類型檢測,但是您檢查任一特徵或用戶接口成語。當新硬件出來時(這往往是相當頻繁的),許多隻針對特定設備類型進行測試的應用程序會中斷。

通常,如果您需要確定應用程序是否在iPad上運行,那是因爲您需要調整用戶界面以匹配設備的較大顯示區域。爲此,Apple建議您使用以下代碼檢查用戶界面習語:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 
    // iPad-specific interface here 
} 
else 
{ 
    // iPhone and iPod touch interface here 
} 
+0

其他返回值將是UIUserInterfaceIdiomPhone。 – arlomedia 2012-05-15 16:29:56

2

這裏是最好的回答我:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
{ 
    //iPhone methods 
} 
else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 
    //iPad methods 
} 
+0

我會推薦這個布拉德的代碼只有其他循環。難怪明天蘋果是否會推出與iPhone不同的新屏幕尺寸。 – 2014-01-23 01:44:41

0
if ([(NSString*)[UIDevice currentDevice].model isEqualToString:@"iPad"]) { 
      NSLog(@"...in iPad");   
} else { 
      NSLog(@"...in iPhone/iPod");    
} 
1

試試這個

 if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) 
     { 
      // etc. 
     } 
    else 
     { 
     //iphone 
     }