2015-02-01 3 views
1

Я разработал клавиатуру для iOS 8. В зависимости от того, является ли устройство iPhone или iPad, я загружаю разные макеты. Теперь у меня проблема при открытии приложения для пользователя (например: Instagram), которое является приложением для iPhone, но загружаемом на iPad, и, конечно, iPad изменяет размер этого приложения. Моя клавиатура обнаруживает устройство как iPad и загружает макет для iPad, но поскольку приложение не является и iPad-приложение, загруженная раскладка клавиатуры не подходит для него. В ближайшее время, есть ли способ проверить программно, если приложение iPhone изменилось на iPad? Поэтому я могу загрузить правильную раскладку клавиатуры.Проверьте, открыто ли приложение для iPhone на iPad

+0

Заголовок и описание вопроса не совпадают. –

ответ

0

Если речь идет о каком-либо родовом приложении, ответ не. Приложение для клавиатуры не может определить, установлено ли установленное приложение на основе iphone или iPad.

Если разработчик обоих приложений одинаковый, вы можете получить определенное значение, которое может быть передано через clientUrl.

+0

Это печально. Может ли быть обнаружено это с использованием ширины экрана или разрешения? Когда iPad изменяет размер приложения iPhone, может быть разница в ширине и высоте, я надеюсь. – Amidos

+0

Вы должны учитывать, что даже если это существует, клавиатурное приложение не получит уведомление об этом. :(https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html#//apple_ref/doc/uid/TP40014214-CH16-SW3 – bllakjakk

0
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 

если вы звоните:

if(IS_IPHONE) { 
    //Device is a iPhone 
} 
else { 
    //Device is a iPAD 
} 
+0

Я использую то же самое. Но это только определяет, является ли устройство iPhone или iPad. Мне нужен специальный случай, чтобы определить, открыто ли приложение iPhone на iPad. – Amidos

+3

Вы не поняли вопроса. – user523234

2

Если приложение является приложением iPhone (например, Instagram в вашем примере), запущенным в режиме эмулятора на iPad, оно будет иметь пользовательский интерфейс телефона, но тип модели iPad. Вы можете проверить это со следующим кодом:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && 
    [[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) { 
    // This app is an iPhone app running on an iPad, use iPhone-style layout 
} 

Надеюсь, это сработает для вашей пользовательской клавиатуры.

+0

К сожалению, это больше не кажется Протестировано, запустив приложение iPhone только на iPad Air2 с iOS9.3. Результатом UI_USER_INTERFACE_IDIOM всегда является UIUserInterfaceIdiomPad. – Simo

1

Я просто столкнулся с этой проблемой, и единственным решением, которое я придумал, является сравнение ширины моей клавиатуры с шириной экрана устройства.

Поскольку все пользовательские клавиатуры iOS заполняют ширину своего хост-приложения, это означает, что если ширина клавиатуры меньше ширины экрана устройства, то она должна работать с некоторым дополнением по краю. то есть клавиатура будет представлен в приложении iPhone, который в настоящее время отображается на

let keyboardWidth = self.keyboardView.frame.size.width 
let screenWidth = UIScreen.mainScreen().bounds.size.width 

if (keyboardWidth < screenWidth) 
{ 
    print("The keyboard is being displayed in an iPhone app that is running on an iPad.") 
} 

не самое элегантное решение IPad, но он работает в настоящее время.

Смежные вопросы