2010-07-08 2 views

ответ

4

Решение Brad абсолютно верно. Если вы создаете универсальное приложение, предназначенное для работы на iPhone с более старой ОС, а также с современными iPads и iPhones, вы можете добавить этот код, чтобы поймать ситуации, когда идиома не определена.

// 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, вам не нужен дополнительный код. Увидев, как Apple теперь требует, чтобы вы создавали с использованием SDK 4.0 для отправки в App Store, вам не нужно будет продолжать этот код. –

+2

Функция просто оценивает 0 на более старых устройствах ОС, что приводит к тому, что оператор равенства работает так же, как если бы он обнаружил устройство, отличное от iPad. Таким образом, он работает, как ожидалось, даже на старых ОС. –

+0

Спасибо. Это помогает. У меня SDK 4 установлен на моем iMAC, но у моего iphone все еще есть 3.1.2. Так что это будет важно. У меня нет iPAD (приложение использует камеру для iPhone и библиотеку фотографий для iPAD). Могу ли я «арендовать» iPAD откуда-то, так как я не хочу выпускать приложение без тестирования на реальном устройстве. –

33

Настоятельно рекомендуется не делать определение типа устройства для определения, если приложение работает на IPad, но вы исследуете либо функции или пользовательского интерфейса идиомы. Многие приложения, которые тестируют только для определенных типов устройств, ломаются, когда появляется новое оборудование (которое, как правило, довольно частое).

Обычно, если вам нужно определить, работает ли приложение на iPad, это связано с тем, что вам нужно настроить пользовательский интерфейс в соответствии с большей площадью дисплея устройства. Для этого Apple рекомендует проверить идентификатор пользовательского интерфейса, используя следующий код:

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

Другой возвращаемое значение будет UIUserInterfaceIdiomPhone. – arlomedia

2

Вот лучший ответ, который я получил:

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

Я бы порекомендовал этот код над кодом Брэда только с петлей else. Неудивительно, что если завтра Apple придумает новый размер экрана, который даже отличается от iPhone. –

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 
     } 
Смежные вопросы